2

如何在 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 出现在一个观察中。是否有一个函数可以告诉我是否需要在更大的数据集中进行计算?

谢谢

4

4 回答 4

2

另一种可能性是使用duplicated(). 这将仅获得独特响应模式的数量,而不是它们是什么。

length( which( !duplicated(d) ) )

# [1] 2

这看起来比使用apply()和/或快得多table()

于 2012-04-26T14:32:01.320 回答
1

你可以试试:

table(apply(d, 1, paste, collapse=""))
于 2012-04-26T10:26:22.247 回答
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

有关提示 ,请参阅计算 R 中的唯一值。

于 2012-04-26T11:22:05.120 回答
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))
于 2012-04-26T15:25:41.710 回答