簡體   English   中英

select 行與 R 數據框中列表中的匹配項的快速方法

[英]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

您可以使用sapplymapply

df[sapply(df$IDs, \(a) any(x[[1]] %in% a)), ]
df[mapply(\(a, b) any(a %in% b), x, df$IDs), ]
Output
#   NAME stat     IDs
# 1   A1   14 1, 2, 3
# 2   A2   15 2, 3, 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM