列名称在R中的循环中的循环

列名称在R中的循环中的循环,r,loops,R,Loops,我有以下数据: id A B C 1 1 1 0 2 1 1 1 3 0 1 1 我将创建一个函数,用于计算列之间的以下三个信息: 个人数量i)有A和B,ii)有A但没有B,iii)B但没有A。类似地,我会喜欢一个递归循环来计算A和C,以及B和C的这三个数字。有聪明的方法吗?循环中的循环?到目前为止,我已经尝试了以下方法: for(ii in colnames(df)){ for(jj in (ii+1):df){ print(ii,jj) }} 也许是这样的: # functi

我有以下数据:

id A B C
1  1 1 0
2  1 1 1  
3  0 1 1 
我将创建一个函数,用于计算列之间的以下三个信息: 个人数量i)有A和B,ii)有A但没有B,iii)B但没有A。类似地,我会喜欢一个递归循环来计算A和C,以及B和C的这三个数字。有聪明的方法吗?循环中的循环?到目前为止,我已经尝试了以下方法:

for(ii in colnames(df)){
for(jj in (ii+1):df){
print(ii,jj)
}}

也许是这样的:

# function to return your metrics
foo = function(x, y) {
  c(
    "x and y" = sum(x & y),
    "x not y" = sum(x & !y),
    "y not x" = sum(!x & y)
  )
}


# generate combinations of columns
col_combos = combn(names(df)[-1], 2)

result = apply(col_combos, 2, function(x) foo(df[[x[1]]], df[[x[2]]]))
colnames(result) = apply(col_combos, 2, toString)
result
#         A, B A, C B, C
# x and y    2    1    2
# x not y    0    1    1
# y not x    1    1    0

使用这些数据:

df = read.table(text = 'id A B C
1  1 1 0
2  1 1 1  
3  0 1 1 ', header = TRUE)

看起来很棒@Gregor,非常感谢!当我们有例如5列时,我们能推断出一种情况吗?同样的代码应该可以正常工作。我对列数的唯一参考是跳过第一列的
[-1]