我有一个数据框,我想提取特定列具有特定值的行。列名存储在字符数组中,值存储在列表中。
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。
答案 0 :(得分:2)
我在发布问题之前就找到了这个技巧。
我可以将数据帧与具有与行相同长度的列表进行比较,该列返回指示每行中哪个元素与列表中的对应元素匹配的逻辑矩阵。因为我想找到完全匹配的行,所以我apply
跨越行all
函数来获取data
行的逻辑索引。
desired_rows <- data[apply(data[column_key]==value_key, 1, all),]