我有一个数据框,我想提取特定列具有特定值的行。列名存储在字符数组中,值存储在列表中。
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。
最佳答案
我在发布问题之前发现了这个技巧。
我可以将数据帧与与行长度相同的列表进行比较,该列表返回一个逻辑矩阵,指示每行中的哪个元素与列表中的相应元素匹配。因为我想找到完全匹配的行,所以我 apply
all
跨行函数以获取 data
行的逻辑索引.
desired_rows <- data[apply(data[column_key]==value_key, 1, all),]
关于r - 按列名称动态索引数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25687965/