R 按列求和,将值匹配到另一列

R 按列求和,将值匹配到另一列,r,R,似乎,我在这里遗漏了一些链接。 我有数据框 df<-data.frame(w=sample(1:3,10, replace=T), x=sample(1:3,10, replace=T), y=sample(1:3,10, replace=T), z=sample(1:3,10, replace=T)) > df w x y z 1 3 1 1 3 2 2 1 1 3 3 1 3 2 2 4 3 1 3 1 5 2 2 1 1 6 1 2 2 3 7 1 2 2

似乎,我在这里遗漏了一些链接。 我有数据框

df<-data.frame(w=sample(1:3,10, replace=T), x=sample(1:3,10, replace=T), y=sample(1:3,10, replace=T), z=sample(1:3,10, replace=T))

> df
   w x y z
1  3 1 1 3
2  2 1 1 3
3  1 3 2 2
4  3 1 3 1
5  2 2 1 1
6  1 2 2 3
7  1 2 2 2
8  2 2 2 3
9  1 3 3 3
10 2 2 1 1
我知道使用apply,我可以执行行或列操作

 apply(df,2,length)
 w  x  y  z 
10 10 10 10 

如何组合这两个函数?

试试
colSums

colSums(df[-1] == df[, 1])
# x y z 
# 3 2 1 
或者,如果您进入
*应用
循环,可以尝试

vapply(df[-1], function(x) sum(x == df[, 1]), double(1))

您可以通过
apply(df[-1],2,function(cl)sum(df[,1]==cl))
组合它们,但是@David的解决方案应该更有效,尤其是在大型数据集上。太好了,谢谢。[咆哮:为什么我必须等待10分钟才能接受答案]@DavidArenburg使用
数据表
setDT(df)[,lapply(.SD,函数(x)sum(x==df[[1]]),.SDcols=-1]
。我不确定这是否有效,因为我一直在思考这个问题,但与仅仅是
colMeans
。。。
vapply(df[-1], function(x) sum(x == df[, 1]), double(1))