矩阵中存在的响应模式数

时间:2012-04-26 10:19:35

标签: r matrix

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

由于

4 个答案:

答案 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))