通过条件语句动态子集数据框

Dynamically subset data frame by a conditional sentence

我想动态地对数据框进行子集化,并使用一个固定变量执行分析,并按顺序对其他变量进行条件处理。例如,假设我有一个 3 变量数据框(在我的例子中我有 10 个):

x  y  z
a  1  1
b  3  NA
NA 5  0
f  NA 1

我想对数据帧条件进行子集化 1) x, z 不缺
2) y, z 不缺

我的目标输出是这样的:

x z
a 1
f 1

y z
1 1
5 0

我希望在我的所有数据集中使用 n 个变量动态地完成这种成对比较。输出可以是一个列表。

我们可以使用 combn,然后循环、子集和删除 NA 行:

# dummy data
df1 <- read.table(text = "x  y  z
a  1  1
                  b  3  NA
                  NA 5  0
                  f  NA 1", header = TRUE)
# result
apply(combn(colnames(df1), 2), 2, function(i){
  res <- df1[, i]
  res[complete.cases(res), ]
  })
# [[1]]
#   x y
# 1 a 1
# 2 b 3
# 
# [[2]]
#   x z
# 1 a 1
# 4 f 1
# 
# [[3]]
#   y z
# 1 1 1
# 3 5 0