组合所选列的行

时间:2016-06-15 07:02:18

标签: r dataframe dplyr data-manipulation

我需要数据操作方面的帮助。我有一个看起来像这样的大数据集。

df_old<- read.table(header = TRUE, text = "
id  var1  date       time       var2 var3 var4
 1  A     2006-08-20 09:00:00   X    R    V
 1  A     2006-08-20 09:05:00   Y    Q    U
 1  A     2006-09-25 10:00:00   Z    R    V
 2  A     2007-03-29 13:00:00   X    P    T
 2  A     2007-04-20 11:05:00   Y    Q    U
")

这就是我想做的事情:

  1. 对于每个唯一的&#34; id&#34;,我只想过滤具有最早日期的行。因此,在这个例子中,我想只保留第1行,第2行和第4行。
  2. 接下来,因为第1行和第2行具有相同的&#34; id&#34;和#34;日期&#34;,我想把它们结合起来,以便一个&#34; id&#34;对应一行,一行对应一个&#34; id&#34;。
  3. 我想对所选列上的行应用粘贴(...,sep =&#34; - &#34;)。具体来说,我希望将第1行和第2行中的条目组合为列&#34; var2&#34;和&#34; var3&#34;只要。至于&#34; var1&#34;,&#34; time&#34;和&#34; var4&#34;,我只想保留第一个值。
  4. 这就是我希望它的样子:

    df_new <- read.table(header = TRUE, text = "
    id  var1  date       time       var2 var3 var4
     1  A     2006-08-20 09:00:00   X-Y  R-Q  V
     2  A     2007-03-29 13:00:00   X    P    T
    ")
    

1 个答案:

答案 0 :(得分:2)

您可以先修改var2var3,然后按日期排列并仅选择slice的第一行:

library(dplyr)    
df_old %>%
   group_by(id, date) %>%
   mutate(var2 = paste(unlist(var2), collapse = "-"),
          var3 = paste(unlist(var3), collapse = "-")) %>%
   group_by(id) %>%
   arrange(date) %>%
   slice(1)