![](/img/trans.png)
[英]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.