[英]Is there a quick way of filtering rows of a data.frame more than once?
[英]Quick way to select rows with matching terms in a list in data frame in R
我有一个数据框,其中包含存储 ID 的列表:
a <- list(as.character(c("1","2","3")))
b <- list(as.character(c("2","3","5")))
c <- list(as.character(c("4","6","8")))
df = data.frame(NAME = c("A1", "A2", "A3"), stat = c(14, 15, 16))
df$IDs[1] <- a
df$IDs[2] <- b
df$IDs[3] <- c
此外,我有一个字符列表,它是我想要跟踪的我感兴趣的 ID 的参考:
x <- list(as.character(c("2","3")))
我想过滤初始数据框,使其仅包含数据框 ID 列中 ID 为 2 和/或 3 的行(即 x 与 df$ID 匹配;因此在这种情况下,只有在这种情况下名为 A1 和 A2 的行)。
实际的数据框有数百行,所以如果可能的话,我会欣赏比循环更短的路线。
如果您有不同的方法作为您的建议的一部分(比如更多地争论最初的 df ),我也很高兴听到它们。
提前谢谢了。
使用tidyverse
library(dplyr)
library(purrr)
df %>%
filter(map_lgl(IDs, ~ any(unlist(x) %in% .x)))
NAME stat IDs
1 A1 14 1, 2, 3
2 A2 15 2, 3, 5
您可以使用sapply
或mapply
:
df[sapply(df$IDs, \(a) any(x[[1]] %in% a)), ]
df[mapply(\(a, b) any(a %in% b), x, df$IDs), ]
# NAME stat IDs
# 1 A1 14 1, 2, 3
# 2 A2 15 2, 3, 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.