gpt4 book ai didi

r - 在 R 中创建一个双模式频率矩阵

转载 作者:行者123 更新时间:2023-12-04 16:59:08 27 4
gpt4 key购买 nike

我有一个数据框,它看起来像这样:

CASENO    Var1   Var2   Resp1   Resp2
1 1 0 1 1
2 0 0 0 0
3 1 1 1 1
4 1 1 0 1
5 1 0 1 0

数据集中有 400 多个变量。这只是一个例子。我需要在 R 中创建一个简单的频率矩阵(不包括案例编号),但 table功能不起作用。具体来说,我希望对列的一部分进行交叉制表,以创建一个双模频率矩阵。该表应如下所示:
       Var1    Var2
Resp1 3 1
Resp2 3 2

在Stata中,命令是:
gen var = 1 if Var1==1
replace var= 2 if Var2==1

gen resp = 1 if Resp1==1
replace resp = 2 if Resp2==1

tab var resp

最佳答案

这个应该适用于任意数量的 Var & Resps:

d <- structure(list(CASENO = 1:5, Var1 = c(1L, 0L, 1L, 1L, 1L), Var2 = c(0L,  0L, 1L, 1L, 0L), Resp1 = c(1L, 0L, 1L, 0L, 1L), Resp2 = c(1L,  0L, 1L, 1L, 0L)), .Names = c("CASENO", "Var1", "Var2", "Resp1", "Resp2"), class = "data.frame", row.names = c(NA, -5L))   

m <- as.matrix(d[,-1])
m2 <- t(m) %*% m
rnames <- grepl('Resp',rownames((m2)))
cnames <- grepl('Var',colnames((m2)))
m2[rnames,cnames]

[更新] G.Grothendieck 的评论中提供了一个更优雅的版本:
m <- as.matrix(d[,-1])
cn <- colnames(m);
crossprod(m[, grep("Resp", cn)], m[, grep("Var", cn)])

关于r - 在 R 中创建一个双模式频率矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com