统计变量或变量组合的实例数量为真
问题描述:
我是一位热情的R新手,需要一些帮助! :)统计变量或变量组合的实例数量为真
我有看起来像这样的数据帧:
id<-c(100,200,300,400)
a<-c(1,1,0,1)
b<-c(1,0,1,0)
c<-c(0,0,1,1)
y=data.frame(id=id,a=a,b=b,c=c)
凡ID是一个唯一标识符(例如人)和一个,b和Ç是虚设变量是否具有此功能(如始终为1 = TRUE)。
我希望R创建一个矩阵或数据框,其中变量a,b和c都作为列和行的名称。对于矩阵R的值将必须计算具有此特征的标识符的数量或特征的组合。
因此,例如,ID为100,200和400的矩阵的对角线上有一个特征a,其中a和十字形R将输入3.只有ID 100具有特征a和b,因此R将输入1 a和b交叉,等等。
产生的数据帧将不得不像这样:
l<-c("","a","b","c")
m<-c("a",3,1,1)
n<-c("b",1,2,1)
o<-c("c",1,1,2)
result<-matrix(c(l,m,n,o),nrow=4,ncol=4)
由于我的数据集有10个变量和数以百计的观察,我会自动的全过程。
您的帮助将不胜感激。 非常感谢!
答
随着基础R:
crossprod(as.matrix(y[,-1]))
# a b c
# a 3 1 1
# b 1 2 1
# c 1 1 2
答
这被称为邻接矩阵。你可以用qdap包做到这一点很容易地:
library(qdap)
adjmat(y[,-1])$adjacency
## a b c
## a 3 1 1
## b 1 2 1
## c 1 1 2
它,因为你喂养它一个数据帧抛出一个警告。没什么大不了的,可以忽略。也注意到我放弃了负号索引y[, -1]
的第一列(ID)。
需要注意的是,因为你有一个布尔矩阵开始时你可能会得到与有:
Y <- as.matrix(y[,-1])
t(Y) %*% Y
+1我喜欢这样的 – 2013-04-05 19:03:56
感谢简单而优雅的解决方案你非常乔希! – 2013-04-08 07:40:32
@NikolayNenov - 没问题。我总是欣赏一个具有可重现实例的良好公式化问题!如果我们的答案符合条例草案的要求,您可以通过点击左边的复选标记来“接受”其中一个(我似乎都可以接受)。 – 2013-04-08 12:36:16