可以要求R从一组二进制变量中随机选取两个变量来计算比例吗?
我在数据集中有几个二进制变量,我想计算两个变量的所有组合中“1 1”的比例,例如(a1=1和a2=1)的比例。我可以在每次手动指定两个变量的情况下运行代码,但我的数据中有10多个变量,因此至少有45个组合。有没有办法让R自动配对变量来为我计算可以要求R从一组二进制变量中随机选取两个变量来计算比例吗?,r,R,我在数据集中有几个二进制变量,我想计算两个变量的所有组合中“1 1”的比例,例如(a1=1和a2=1)的比例。我可以在每次手动指定两个变量的情况下运行代码,但我的数据中有10多个变量,因此至少有45个组合。有没有办法让R自动配对变量来为我计算 structure(list(a1 = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("0", "1")
structure(list(a1 = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L),
.Label = c("0", "1"), class = "factor"),
a2 = structure(c(1L,1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L),
.Label = c("0", "1"), class = "factor"),
a3 = structure(c(1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L,1L, 1L),
.Label = c("0", "1"), class = "factor"),
a4 = structure(c(1L,2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
.Label = c("0","1"), class = "factor"),
a5 = structure(c(2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L),
.Label = c("0", "1"), class = "factor")), row.names = 180:190, class = "data.frame")
我们可以创建一个函数来获取选取两个列名的
示例
,然后对数据进行子集,检查两个列是否都等于1,得到平均值
f1 <- function(dat) {
nm1 <- sample(names(dat), 2, replace = FALSE)
setNames(mean(dat[,nm1[1]]== 1 & dat[,nm1[2]] == 1), paste(nm1, collapse="_"))
}
f1(df1)
# a3_a5
# 0
f1@arkun我修改了它。它有一个错误,在dat[,x[1]]中表示错误:维度数不正确。谢谢!对不起,我没有把问题说清楚。我想计算所有可能组合的平均值。(该函数在每次随机选取其中一个来计算比例方面做得很好,但我需要重复运行它,不确定是否可以得到所有组合的结果)@user12721567 ii尽管您想一种方法,让R随机配对变量来为我计算是。每次运行函数时,都会生成一个结果。因为它是随机选择一对变量,比如说如果我有10个变量,可以有45个组合。即使每次生成的组合不同,我也需要运行代码45次,以获得我需要的完整结果,rt?@user12721567这就是我之前有combn
的原因,但后来由于随机配对而更改
f1 <- function(dat) {
combn(names(dat), 2, FUN = function(nm) {
nm1 <- paste(nm, collapse="_")
setNames(mean(dat[, nm[1]] ==1 & dat[, nm[2]] == 1), nm1)},
simplify = FALSE)
}
f1(df1)
#[[1]]
#a1_a2
# 0
#[[2]]
#a1_a3
# 0
#[[3]]
#a1_a4
# 0
#[[4]]
# a1_a5
#0.09090909
#[[5]]
# a2_a3
#0.09090909
#[[6]]
#a2_a4
# 0
#[[7]]
# a2_a5
#0.09090909
#[[8]]
#a3_a4
# 0
#[[9]]
#a3_a5
# 0
#[[10]]
#a4_a5
# 0