在group_by之后创建包含多个元素的新列

时间:2016-04-01 15:42:22

标签: r

我正在尝试按照以下说明制作新列。 d实际上对应于日期,V2是给定日期的事件。我需要收集给定日期的事件。 V3是单列,其行条目是串联。提前致谢。我的尝试不起作用。

 df =   V1    V2 
        d1    U
        d2    M
        d1    T
        d1    Q
        d2    P

期望得到的df

  df.1 = V1      V3
         d1      U,T,Q
         d2      M,P


 df.1 <- df %>% group_by(., V1) %>%
         mutate(., V3 = c(distinct(., V2))) %>%
         as.data.frame

上述代码导致以下错误;忽略15和1 - 它们特定于我的实际代码

Error: incompatible size (15), expecting 1 (the group size) or 1

3 个答案:

答案 0 :(得分:1)

您可以像这样使用聚合:

df.1 <- aggregate(V2~V1,paste,collapse=",",data=df)

#  V1    V2
# 1 d1 U,T,Q
# 2 d2   M,P

答案 1 :(得分:0)

它不允许向量作为数据帧中的元素。因此,您可以使用paste将元素连接为单个字符串,而不是使用c()。

df.1 <- df %>% group_by(V1) %>% mutate(V3 = paste(unique(V2), collapse = ",")) %>% select(V1, V3) %>% unique() %>% as.data.frame()

答案 2 :(得分:0)

仍然使用dplyr,您可以尝试:

df %>% group_by(V1) %>% summarize(V3 = paste(unique(V2), collapse=", "))