我的数据表具有以下格式
ID Var1 Var2 Var3 ...
1_1 0 0 1 ...
1_2 1 1 0 ...
1_3 0 0 1 ...
... ... ... ... ...
我想从唯一组合(Var
列)中提取ID。获取唯一组合不是问题(plyr::count()
,aggregate()
等),我想提取有助于这些唯一组合的id
变量。
输出应该看起来像这样
Var1 Var2 Var3 IDs
0 0 1 1_1, 1_3
1 1 0 1_2
其中IDs
列是构成唯一组合的所有ID的向量/列表。
我尝试了R package和dplyr
管道,到目前为止没有任何效果。
任何建议甚至R程序包如何处理此任务?
谢谢!
答案 0 :(得分:11)
您可以将group_by_at
与匹配列名的模式一起使用,并进行总结,即
df %>%
group_by_at(vars(contains('Var'))) %>%
summarise(IDs = toString(ID))
给出,
# A tibble: 2 x 4 # Groups: Var1, Var2 [2] Var1 Var2 Var3 IDs <int> <int> <int> <chr> 1 0 0 1 1_1, 1_3 2 1 1 0 1_2
答案 1 :(得分:5)
df %>% group_by_at(.vars=-1) %>% summarize(IDs=list(ID))
类似于Sotos的解决方案,但假设所有其他列都需要唯一,并且IDs列将是列表的列而不是字符串,则简化了ID列的选择。
# A tibble: 2 x 4
# Groups: Var1, Var2 [2]
Var1 Var2 Var3 IDs
<int> <int> <int> <list>
1 0 0 1 <chr [2]>
2 1 1 0 <chr [1]>
只是为了好玩,您可以使用tidyr
的{{1}}函数进一步简化它:
nest
这仍然将ID留在列表中,这对您可能有用也可能没有用,但在标题中更清楚地显示了它。将列保留为列表而不是字符串的另一个好处是,您可以使用require(tidyr)
nest(df,IDs=ID)
# A tibble: 2 x 4
Var1 Var2 Var3 IDs
<int> <int> <int> <S3: vctrs_list_of>
1 0 0 1 1_1, 1_3
2 1 1 0 1_2
轻松地重新创建原始表:
unnest
答案 2 :(得分:1)
使用汇总且唯一
aggregate(dat$ID,list(dat$Var1,dat$Var2,dat$Var3),unique)