簡體   English   中英

R:如何根據數據框的值添加行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM