如何在 R 中的矩阵中为所有变量获取实际响应模式的数量?例如,我有一个由 3 个变量 a、b、c 和三个观察值组成的数据集。
a<-c(0,1,0)
b<-c(1,0,1)
c<-c(1,0,1)
d<-cbind(a,b,c)
导致矩阵
d
如果我没记错的话,它有两种响应模式:0,1,1 出现在两个观察中,1,0,0 出现在一个观察中。是否有一个函数可以告诉我是否需要在更大的数据集中进行计算?
谢谢
另一种可能性是使用duplicated()
. 这将仅获得独特响应模式的数量,而不是它们是什么。
length( which( !duplicated(d) ) )
# [1] 2
这看起来比使用apply()
和/或快得多table()
。
你可以试试:
table(apply(d, 1, paste, collapse=""))
主题的变化,允许选择感兴趣的列。
d<-data.frame(d)
d$combined<-with(d, paste(a,b,c))
table(d$combined)
0 1 1 1 0 0
2 1
data.frame(table(d$combined))
Var1 Freq
1 0 1 1 2
2 1 0 0 1
有关提示 ,请参阅计算 R 中的唯一值。
什么,还没有ddply
解决办法?你plyr
的粉丝越来越慢了...
> library(plyr)
> d <- as.data.frame(d)
> ddply(d, ~a+b+c, summarize, n=length(c))
a b c n
1 0 1 1 2
2 1 0 0 1
也可以使用paste
可能更少的输入来创建公式:
f <- paste("~", paste(names(d), collapse="+"))
ddply(d, as.formula(f), summarize, n=length(c))