如何在R中为所有变量获取矩阵中的实际响应模式数?一个例子是我有一个由3个变量a,b,c和3个观测值组成的数据集。
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存在于一个观察中。是否有一个函数可以告诉我,如果我需要在更大的数据集中计算它?
由于
答案 0 :(得分:2)
另一种可能性是使用duplicated()
。这将获得简单的唯一响应模式的数量,而不是它们是什么。
length( which( !duplicated(d) ) )
# [1] 2
这看起来比使用apply()
和/或table()
要快得多。
答案 1 :(得分:1)
你可以尝试:
table(apply(d, 1, paste, collapse=""))
答案 2 :(得分:1)
主题的变化,允许选择感兴趣的列。
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
有关提示,请参阅count unique values in R。
答案 3 :(得分:1)
什么,没有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))