[英]In R, how can I add values onto the end of rows where one value matches that of another data frame?
[英]R: How can I add rows based on values of a data frame?
目前,我有兩個要合並的數據框。 數據框 A包含酒店房間的每日能源和用水量數據,數據框 B包含有關住在房間里的人的信息。 為了匹配數據幀 A的數據結構,我需要解決以下關於數據幀 B的問題。
數據框 B當前如下所示:
`Person ID`` `Apartment` `contract_start` `contract_end`
<chr> <chr> <date> <date>
1 hnd48 T217 2021-09-16 2021-09-18
2 jFDJu T217 2021-09-19 2021-09-21
3 kqKcX A705 2021-09-16 2021-09-19
為了匹配數據框 A的數據結構,一個人住在酒店房間內的每一天都需要是一個新行。 因此,我想添加一個新列“日期”,該列從“contract_start”日開始到“contract_end”日結束,計算一個人在房間內居住的每一天。 因此,理想情況下,數據框應如下所示:
`Person ID`` `Apartment` `dates`
<chr> <chr> <date>
1 hnd48 T217 2021-09-16
2 hnd48 T217 2021-09-17
3 hnd48 T217 2021-09-18
4 jFDJu T217 2021-09-19
5 jFDJu T217 2021-09-20
6 jFDJu T217 2021-09-21
7 kqKcX A705 2021-09-16
8 kqKcX A705 2021-09-17
9 kqKcX A705 2021-09-18
10kqKcX A705 2021-09-19
我怎么能用代碼做到這一點?
最好的問候,文森特
library(tidyverse)
df = tribble(
~`Person ID`, ~Apartment, ~contract_start, ~contract_end,
"hnd48", "T217", "2021-09-16", "2021-09-18",
"jFDJu", "T217", "2021-09-19", "2021-09-21",
"kqKcX", "A705", "2021-09-16", "2021-09-19"
) %>%
mutate(across(c(contract_start, contract_end), as.Date))
df %>%
rowwise() %>%
mutate(
dates = paste0(
as.character(
seq(contract_start, contract_end, by = "days")
), collapse = ",")
) %>%
select(-c(contract_start, contract_end)) %>%
separate_rows(dates, sep = ",") %>%
mutate(dates = as.Date(dates))
# A tibble: 10 x 3
`Person ID` Apartment dates
<chr> <chr> <date>
1 hnd48 T217 2021-09-16
2 hnd48 T217 2021-09-17
3 hnd48 T217 2021-09-18
4 jFDJu T217 2021-09-19
5 jFDJu T217 2021-09-20
6 jFDJu T217 2021-09-21
7 kqKcX A705 2021-09-16
8 kqKcX A705 2021-09-17
9 kqKcX A705 2021-09-18
10 kqKcX A705 2021-09-19
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.