我有以下数据:
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的所有值。
我该怎么做?
答案 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)