按列名称动态索引数据框

时间:2014-09-05 14:16:36

标签: r dataframe

我有一个数据框,我想提取特定列具有特定值的行。列名存储在字符数组中,值存储在列表中。

data <- data.frame(A=c("a","b","b"), B=c(1,2,2), C=(3,3,4))
column_key <- c("A", "B")
value_key <- list("b", 2)

显然,如果我对密钥的列名进行硬编码,我可以通过简单的索引来提取我想要的信息:

desired_rows <- data[data$A=="b" & data$B==2,]

desired_rows =
  A B C
2 b 2 3
3 b 2 4

但是如果列名存储在变量中,我该怎么做呢。理想情况下,它会是这样的:

key <- value_key
names(key) <- column_key
desired_rows <- data[key,]

但我无法使用列表索引data.frame。

1 个答案:

答案 0 :(得分:2)

我在发布问题之前就找到了这个技巧。

我可以将数据帧与具有与行相同长度的列表进行比较,该列返回指示每行中哪个元素与列表中的对应元素匹配的逻辑矩阵。因为我想找到完全匹配的行,所以我apply跨越行all函数来获取data行的逻辑索引。

desired_rows <- data[apply(data[column_key]==value_key, 1, all),]