通过条件语句动态子集数据框
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
我想动态地对数据框进行子集化,并使用一个固定变量执行分析,并按顺序对其他变量进行条件处理。例如,假设我有一个 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