【问题标题】:Dynamically indexing a data frame by column name按列名动态索引数据框
【发布时间】:2014-09-05 14:16:36
【问题描述】:

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

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。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我在发布问题之前发现了这个技巧。

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

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

    【讨论】:

    • 等一下,您在提问之前回答了您的问题吗?还是您还在寻找解决方案?
    • @nrussell 值得鼓励。 SO 的主要目的不是帮助 OP,而是为他人创建资源。
    • @Roland 好的,我不确定礼仪,但我在 Meta stack exchange 上进行了调查。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2019-05-15
    相关资源
    最近更新 更多