【问题标题】:Dynamically subset data frame by a conditional sentence通过条件句动态子集数据帧
【发布时间】:2017-02-22 10:43:31
【问题描述】:

我想动态地对一个数据框进行子集化,并使用一个固定变量和其他变量的顺序条件执行分析。例如,假设我有一个 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 个变量动态完成这种成对比较。输出可以是一个列表。

【问题讨论】:

标签: r conditional subset


【解决方案1】:

我们可以使用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

【讨论】:

  • 或类似的,lapply(combn(names(df), 2, FUN = list), function(x) na.omit(df[,x]))
  • @docendodiscimus 很好玩的把戏。奇怪的是我被complete.cases 卡住了,尽管我知道na.omit
猜你喜欢
  • 2021-06-19
  • 2014-09-13
  • 2020-04-03
  • 1970-01-01
  • 2018-10-07
  • 2018-08-21
  • 2011-09-08
  • 2016-10-27
相关资源
最近更新 更多