r中二进制值的组合

时间:2013-05-29 00:20:31

标签: r binary combinations

我是R的新手,希望对列的组合做一些工作。我正在努力编写一些代码来计算几列组合中1的数量。假设我有以下列:

A B C D

我想先计算每个列(A,B,C,D)中的1的数量。 然后是每2列组合中的1的数量(AB,AC,AD,BC,BD,CD)。 然后每3列组合中的1的数量(ABC,ACD,BCD) 然后是所有列中的1的数量(ABCD)

实际数据框大约有10个列。

有人建议为每个组合创建一个二进制值,然后将所有这些二进制值放在一个数组中,但是任何建议都会受到赞赏。 非常感谢

1 个答案:

答案 0 :(得分:2)

一些示例数据:

n <- 10
dat <- data.frame(A = sample(0:1, n, replace = TRUE),
                  B = sample(0:1, n, replace = TRUE),
                  C = sample(0:1, n, replace = TRUE),
                  D = sample(0:1, n, replace = TRUE))

给出要组合的多个列的函数,计算所有组合和相应的总和:

count.or <- function(dat, n = 2) {
  or.sum <- function(cols) sum(rowSums(dat[cols]) > 0)
  counts <- combn(colnames(dat), n, FUN = or.sum)
  names  <- combn(colnames(dat), n, FUN = paste, collapse = "")
  setNames(counts, names)
}

行动中:

count.or(dat, 1)
# A B C D 
# 6 6 5 9 
count.or(dat, 2)
# AB AC AD BC BD CD 
#  8  7  9  9 10  9 
count.or(dat, 3)
# ABC ABD ACD BCD 
#   9  10   9  10 
count.or(dat, 4)
# ABCD 
#   10

或者在一个电话中:

unlist(lapply(1:4, count.or, dat = dat))
#    A    B    C    D   AB   AC   AD   BC   BD   CD  ABC  ABD  ACD  BCD ABCD 
#    6    6    5    9    8    7    9    9   10    9    9   10    9   10   10