Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于行或列匹配的多个数据帧的子集列表 库(tidyverse) 图书馆(dplyr)_R_Dataframe_Subset - Fatal编程技术网

基于行或列匹配的多个数据帧的子集列表 库(tidyverse) 图书馆(dplyr)

基于行或列匹配的多个数据帧的子集列表 库(tidyverse) 图书馆(dplyr),r,dataframe,subset,R,Dataframe,Subset,数据帧列表,其中有些与向量匹配,有些与向量不匹配 lsdf% 行名称到列(,var=“ID”), 列表3=头(星球大战) ) 与某个数据帧匹配的名称向量 vec马自达RX4 21.0 2.620 1 #>马自达RX4 Wag 21.0 2.875 1 #>Datsun 710 22.8 2.320 1 #>大黄蜂4路21.43.2150 #>大黄蜂运动约18.73.4400 #>Valiant 18.13.4600 0 0 #> #>$df2 #>ID马自达RX4马自达RX4 Wag Dat

数据帧列表,其中有些与向量匹配,有些与向量不匹配

lsdf%
行名称到列(,var=“ID”),
列表3=头(星球大战)
)
与某个数据帧匹配的名称向量

vec马自达RX4 21.0 2.620 1
#>马自达RX4 Wag 21.0 2.875 1
#>Datsun 710 22.8 2.320 1
#>大黄蜂4路21.43.2150
#>大黄蜂运动约18.73.4400
#>Valiant 18.13.4600 0 0
#> 
#>$df2
#>ID马自达RX4马自达RX4 Wag Datsun 710大黄蜂4驱动大黄蜂运动约
#>1英里21.00 21.000 22.80 21.400 18.70
#>2 wt 2.62 2.875 2.32 3.215 3.44
#>凌晨3时1.00 1.000 1.00 0.000 0.00
#>英勇的
#> 1   18.10
#> 2    3.46
#> 3    0.00
#> 
#>$df3
#>#tibble:6 x 13
#>姓名身高大量头发颜色皮肤颜色眼睛颜色出生年份性别家庭世界
#>                                    
#>1卢克172777金黄色浅蓝色19男塔图因
#>2 C-3PO 167 75金黄色112塔图因
#>3 R2-D2 96 32白色,bl~红色33纳布
#>4省道202 136非白黄41.9雄性塔图因
#>5莱娅~150 49棕色浅棕色19雌性奥德朗
#>6 Owen~178 120棕色,gr~浅蓝色52雄性塔图因
#> # ... 还有4个变量:物种、电影、车辆、,
#>#星际飞船

由(v0.3.0)创建于2020-02-07我们可以通过检查条件来执行此操作

library(purrr)
library(dplyr)
map(lsdf, ~ {nm1 <- names(.x)
      if("ID" %in% nm1)  .x %>%
                   filter(ID %in% vec) else if(any(nm1 %in% vec)) 
       .x %>% select(intersect(nm1, vec))
 else .x
 })

是不是
lsdf%rownames\u to_column(“ID”)、list2=as.data.frame(t(head(mtcars))%%>%rownames\u to_column(“ID”)、lisst3=head(starwars)%%>%rename(ID=name))
我不清楚您想做什么?如何决定何时筛选行或何时选择列?如果向量名称是列名的一部分,我将选择它们。如果向量名称是part ID列,我将对它们进行过滤。如果没有,我什么也不做。
map(lsdf, ~ .x %>% 
                select(if(any(names(.) %in% vec)) 
                   intersect(names(.), vec) else everything()) %>% 
                filter(if('ID' %in% names(.)) ID %in% vec else TRUE))