如何为包含列表中数值的任何行的数据框子集?

时间:2019-10-16 19:08:51

标签: r dataframe

我有一个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)

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

2 个答案:

答案 0 :(得分:1)

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

library(tidyverse)

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

答案 1 :(得分:0)

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

df1 <- as.data.frame(matrix(sample(1:52000, 26000), nrow = 1000), stringsAsFactors = F)

df1[rowSums(sapply(df1, `%in%`, dx.codes)) > 0,]