R语言 删除数据框列表中具有特定字符串的行

zpgglvta  于 2022-12-25  发布在  其他
关注(0)|答案(3)|浏览(390)

我有一个 Dataframe 列表,如下所示:

df1<- data.frame(x1=c("Ben","ABC","Alex","Tim", "Lisa", "MJ", "ABC"), 
x2=c(3,NA,9,5,7,2,NA), 
x3=c(3,NA,6,9,3,1,NA))

df2<- data.frame(x1=c("Alex","ABC","Tyler","Ben", "Lisa", "MJ", "ABC"), 
x2=c(3,NA,2,5,7,2,NA), 
x3=c(3,NA,6,5,3,2,NA))

df3<- data.frame(x1=c("Lisa","ABC","Tyler","Ben", "Lisa", "MJ", "ABC"), 
x2=c(3,NA,9,5,7,2,NA), 
x3=c(3,NA,6,9,3,1,NA))

df_list<-list(df1, df2, df3)

我想删除列表中所有数据框中包含字符串“ABC”的所有行。实际上,我的数据框列表包含更多的数据框。因此,我不想对每个数据框单独执行操作,而是直接对数据框列表执行操作。
我怎么能这么做?谢谢!

eqoofvh9

eqoofvh91#

> lapply(df_list,function(x){x[x$x1!="ABC",]})

[[1]]
    x1 x2 x3
1  Ben  3  3
3 Alex  9  6
4  Tim  5  9
5 Lisa  7  3
6   MJ  2  1

[[2]]
     x1 x2 x3
1  Alex  3  3
3 Tyler  5  5
4   Ben  7  3
5  Lisa  2  2
6    MJ NA NA

[[3]]
     x1 x2 x3
1  Lisa  3  3
3 Tyler  9  6
4   Ben  5  9
5  Lisa  7  3
6    MJ  2  1
b09cbbtk

b09cbbtk2#

library(tidyverse)

df_list %>%  
  map(., ~ .x %>% 
        filter(x1 != "ABC"))

[[1]]
    x1 x2 x3
1  Ben  3  3
2 Alex  9  6
3  Tim  5  9
4 Lisa  7  3
5   MJ  2  1

[[2]]
     x1 x2 x3
1  Alex  3  3
2 Tyler  2  6
3   Ben  5  5
4  Lisa  7  3
5    MJ  2  2

[[3]]
     x1 x2 x3
1  Lisa  3  3
2 Tyler  9  6
3   Ben  5  9
4  Lisa  7  3
5    MJ  2  1
4bbkushb

4bbkushb3#

您可以将lapplygrepl一起使用,如下所示:

lapply(df_list, \(x) x[!grepl("ABC", x$x1),])
#> [[1]]
#>     x1 x2 x3
#> 1  Ben  3  3
#> 3 Alex  9  6
#> 4  Tim  5  9
#> 5 Lisa  7  3
#> 6   MJ  2  1
#> 
#> [[2]]
#>      x1 x2 x3
#> 1  Alex  3  3
#> 3 Tyler  2  6
#> 4   Ben  5  5
#> 5  Lisa  7  3
#> 6    MJ  2  2
#> 
#> [[3]]
#>      x1 x2 x3
#> 1  Lisa  3  3
#> 3 Tyler  9  6
#> 4   Ben  5  9
#> 5  Lisa  7  3
#> 6    MJ  2  1

创建于2022年12月23日,使用reprex v2.0.2

相关问题