簡體   English   中英

在R中子列表的子集

[英]Subsetting a list in R

我正在使用看起來像這樣的列表p:

p
$AAANWWTGC_UNKNOWN
  [1] "4208"   "481"    "6095"   "10370"  "351"    

$AAAYRNCTG_UNKNOWN
  [1] "4052"   "9842"   "23047"  "55800"  "1942"   
$MYOD_01
  [1] "23630"  "84668"  "3151"   "26523"  "667"    

$E47_01
  [1] "90523"  "84668"  "26523"  "154807" "1942"   

我想過濾p以獲得另一個列表,例如q,僅保留列表p中包含給定向量中至少一個字符的元素,例如:

v<-c("4052","1942")

因此,此特定示例中的新列表q應該如下所示:

q
$AAAYRNCTG_UNKNOWN
      [1] "4052"   "9842"   "23047"  "55800"  "1942"  
$E47_01
      [1] "90523"  "84668"  "26523"  "154807" "1942"  

非常感謝!

我們可以從base R使用Filter

Filter(function(x) any(v %in% x), p)
#$AAAYRNCTG_UNKNOWN
#[1] "4052"   "9842"   "23047"  "55800"  "1942"  
#$E47_01
#[1] "90523"  "84668"  "26523"  "154807" "1942"  

您可以嘗試使用purrr包含的tidyversekeep函數對比賽進行計數。 然后子集列表中大於0的列表。

library(tidyverse)
list(c( "4208" ,  "481"    ,"6095"   ,"10370"  ,"351"    ),
     c( "4052" ,  "9842",   "23047",  "55800" , "1942"),
     c("23630",  "84668" , "3151"   ,"26523",  "667"),
     c("90523" , "84668" , "26523" , "154807" ,"1942" )) %>% 
  keep(function(x) sum(x %in% v) > 0)
[[1]]
[1] "4052"  "9842"  "23047" "55800" "1942" 

[[2]]
[1] "90523"  "84668"  "26523"  "154807" "1942" 

暫無
暫無

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

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