Можно ли попросить R случайно выбрать две переменные из группы двоичных переменных, чтобы вычислить пропорцию? - PullRequest
1 голос
/ 09 марта 2020

У меня есть несколько двоичных переменных в наборе данных, и я хочу вычислить пропорцию «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 Ответ

1 голос
/ 09 марта 2020

Мы можем создать функцию для получения sample имен столбцов, выбирающих два, затем поднастроить данные, проверить, равны ли оба столбца 1, получить mean

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 <- 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...