列名称在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]
。