R中按GroupID分组的值出现次数
我有一个数据集,它有多个列,每个列有多个值。我想要的是将每列中的每个值的计数按groupID分组 示例R中按GroupID分组的值出现次数,r,aggregate,R,Aggregate,我有一个数据集,它有多个列,每个列有多个值。我想要的是将每列中的每个值的计数按groupID分组 示例 GroupId | C1 | C2 1 | "valColOne1" | "valColTwo2" 2 | "valColOne1" | "valColTwo2" 2 | "valColOne1" | "valColTwo2" 2 | "valColOne2" | "valColTwo1"
GroupId | C1 | C2
1 | "valColOne1" | "valColTwo2"
2 | "valColOne1" | "valColTwo2"
2 | "valColOne1" | "valColTwo2"
2 | "valColOne2" | "valColTwo1"
1 | "valColOne1" | "valColTwo1"
GroupId | valColOne1 | valColOne2 | valColTwo1 | valColTwo2
1 | 2 | 0 | 1 | 1
2 | 2 | 1 | 1 | 2
并且结果应该是
GroupId | C1 | C2
1 | "valColOne1" | "valColTwo2"
2 | "valColOne1" | "valColTwo2"
2 | "valColOne1" | "valColTwo2"
2 | "valColOne2" | "valColTwo1"
1 | "valColOne1" | "valColTwo1"
GroupId | valColOne1 | valColOne2 | valColTwo1 | valColTwo2
1 | 2 | 0 | 1 | 1
2 | 2 | 1 | 1 | 2
提到初始表中的所有值都将是字符串。获取原始数据帧(我称之为
dat
)并将其融化为长格式。然后使用dcast
计算每个值的出现次数
library(reshape2)
dat.m = melt(dat, id.var="GroupId")
dcast(dat.m, GroupId ~ value)
GroupId valColOne1 valColOne2 valColTwo1 valColTwo2
1 1 2 0 1 1
2 2 2 1 1 2
如果运行每个函数并查看中间结果,最容易看到它们的功能。有关一些示例,请参见和 您可以从base R
table(data.frame(GroupId= df1$GroupId, Val=unlist(df1[-1])))
# Val
# GroupId valColOne1 valColOne2 valColTwo1 valColTwo2
# 1 2 0 1 1
# 2 2 1 1 2
数据
df1使用dplyr/tidyr
,分组方式,do(表格),排列可能会做。@Khashaa谢谢。你能在这个问题上再扩展一点吗。我不是一个真正的R方面的专家,所以任何进一步的解释都会有帮助。你已经有了几个很好的答案:)太好了!你能解释一下每个函数的作用吗?以前从未使用过整形。包装也很好。没想到会有这么简单的方法:)