r - r 中二进制值的组合

标签 r binary combinations

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

A B C D

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

实际数据框大约有 10 列左右。

建议为每个组合创建一个二进制值,然后将所有这些二进制值放入一个数组中,但任何建议都将不胜感激。 非常感谢

最佳答案

一些示例数据:

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

关于r - r 中二进制值的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803564/

相关文章:

r - 使用 sjPlot 从 glmer 模型中绘制随机斜率

binary - 如何从可执行文件/目标文件中查看 0 和 1/机器代码?

r - 选择组合的子集

javascript - 使用字符串组合生成排名

javascript - 查找总和为目标值的给定大小列表的子集

r - 在 R 中使用 for 循环绘制小倍数

r - 使用 case_when(grepl()) 对多个参数进行 transmute_at 指定的列号

r - 稀疏矩阵上的 R 中的快速 NMF

java - 使用递归方法将二进制转换为十进制

c - 在C中注册访问(读/写)