【问题标题】:How to subset a data frame for any row that contains a numeric value from a list?如何为包含列表中数值的任何行子集数据框?
【发布时间】:2019-10-16 19:08:51
【问题描述】:

我有一个包含 26 列和 1000 行的数据框。我有一个包含 20 个值的列表。我只想选择数据框中包含列表中任何(一个或多个)值的行。

我尝试过子集和子集 + 过滤器功能。以下是值列表:

dx.codes <- c(4140 , 4111 , 4118 , 41181 , 41189 , 412 , 4130 , 4131 , 4139 , 4140 , 41400 , 41401 , 41406 , 4142 , 4143 , 4144 , 4148 , 4149 , "V4581", "V4582")

df <- subset(sample.df, subset.df[1:1000, ] %in% dx.codes)

该子集返回一个新的数据框,但没有任何观察结果。查看初始数据框,我知道有包含这些值的行,但是我无法让它们显示在新数据框中。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 (我们不需要全部 1000 行或 20 列来测试解决方案,但合理近似您的数据的东西会非常有帮助)。

标签: r dataframe


【解决方案1】:

假设这 20 个值可以在 26 列中的任何一个中找到,您可以使用以下代码:

library(tidyverse)

df %>%
  filter_all(any_vars(. %in% dx.codes))

【讨论】:

    【解决方案2】:

    使用基础 R,您可以使用 sapply 检查数据框每个单元格的每个代码,然后使用 rowSums 创建索引:

    df1 <- as.data.frame(matrix(sample(1:52000, 26000), nrow = 1000), stringsAsFactors = F)
    
    df1[rowSums(sapply(df1, `%in%`, dx.codes)) > 0,]
    

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2020-07-12
      • 2020-04-28
      • 2019-05-25
      • 1970-01-01
      • 2020-05-28
      • 2018-11-13
      • 1970-01-01
      • 2020-02-17
      相关资源
      最近更新 更多