减少R中只有一列变化的数据帧

时间:2017-12-07 00:29:07

标签: r dplyr

我有以下数据:

    V1    V2    V3    V4    V5
1   A     5.7    f    n     j47
2   A     5.7    f    n     j44
3   A     5.7    f    n     e54
4   B     5.1    m    y     j47
5   B     5.1    m    y     r10

我希望我的输出像:

1:    A    5.7    f    n    j47, j44, e54
2;    B    5.1    m    y    j47, r10

即只有v5 vaires但我想要折叠我的数据,以便可以看到每个标识符(在V1中给出)的V5的所有值。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

使用tidyr也是tidyverse以及dplyr的一部分:( 编辑注意,这会添加列表列而不是将V5折叠为单个列每组的字符串)

library(tidyr)

nest(df, V5)    
#>   V1  V2 V3 V4          data
#> 1  A 5.7  f  n j47, j44, e54
#> 2  B 5.1  m  y      j47, r10

使用的数据

df <- (read.table(text = "V1    V2    V3    V4    V5
1   A     5.7    f    n     j47
2   A     5.7    f    n     j44
3   A     5.7    f    n     e54
4   B     5.1    m    y     j47
5   B     5.1    m    y     r10", header = TRUE, stringsAsFactors = FALSE))

答案 1 :(得分:2)

使用基础R aggregate的另一种解决方案(不需要额外的库):

aggregate(data = df, V5 ~ V1 + V2 + V3 + V4, paste, collapse = ", ")
#  V1  V2 V3 V4            V5
#1  A 5.7  f  n j47, j44, e54
#2  B 5.1  m  y      j47, r10

数据

df <- read.table(text = 
    "V1    V2    V3    V4    V5
     1   A     5.7    f    n     j47
     2   A     5.7    f    n     j44
     3   A     5.7    f    n     e54
     4   B     5.1    m    y     j47
     5   B     5.1    m    y     r10", header = T)