【问题标题】:R: Compare a column of a dataframe with each elements of a listR:将数据框的一列与列表的每个元素进行比较
【发布时间】:2018-11-20 14:52:30
【问题描述】:

请问谁能帮帮我? 我有一个包含各种数据的数据框(df),我有一个包含来自 df 的唯一值的列表(lst)。 例如:

[

我需要将 df$Col1 中的每个元素与 lst$Col1 的第一个元素进行比较,然后与第二个元素、第三个元素等进行比较。 然后对第二列和第三列执行相同的程序。 如果比较为真则返回1,否则返回0。

【问题讨论】:

  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 你能贴出你目前尝试过的代码吗?
  • @Saltcress 看看下面的解决方案。我假设这就是你要找的东西。

标签: r list dataframe comparison


【解决方案1】:

你可以用apply 来做到这一点,如果你说MARGIN = c(1,2) 一个函数到矩阵/data.frame 的每个元素。

df <- data.frame(col1 = c(3,2,9,7,7,1,9), 
             col2 = c(3,6,12,7,10,4,6),
             col3 = c(7,3,10,2,2,2,10))

List <- list(col1 = c(1,2,3,7,9), 
         col2 = c(3,4,6,7,10,12), 
         col3 = c(2,3,7,10))

apply(df, MARGIN = c(1,2), function(x) x %in% List[[1]])
apply(df, MARGIN = c(1,2), function(x) x %in% List[[2]])
apply(df, MARGIN = c(1,2), function(x) x %in% List[[3]])

如果你想把它结合起来,你可以把它放在一个 lappy-function 中,它将一个函数应用于列表的每个元素:

lapply(List, function(x) apply(df, MARGIN = c(1,2), function(y) y %in% x))

您希望将 1/0 作为返回值,而不是 TRUE / FALSE。只需将as.numeric() 用于您的逻辑向量

lapply(List, function(x) apply(df, MARGIN = c(1,2), function(y) as.numeric(y %in% x)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 2013-06-06
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多