可以要求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")

我在数据集中有几个二进制变量,我想计算两个变量的所有组合中“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"), 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