filter () или subset () все кадры данных, хранящиеся в списке - PullRequest
2 голосов
/ 30 января 2020

Если я хочу удалить все строки, содержащие 0, в указанном столбце c, я могу просто сделать:

df <- data.frame(a = c(0,1,2,3,0,5), 
                 b = c(1,2,3,5,3,1))

df <- filter(df, a != 0)       

Как я могу сделать то же самое, если я работаю со списками? Моя интуиция подсказывает мне использовать «lapply», но я не могу заставить синтаксис работать:

#same dataframe.
df <- data.frame(a = c(0,1,2,3,0,5), 
                 b = c(1,2,3,5,3,1))

df2 <- df 
list.df <- list (df, df2)

lapply(list.df, filter(), a !=0) #don't work. How do I fix this syntax?

Заранее большое спасибо!

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Один вариант, включающий purrr, может быть:

map(.x = list.df, ~ .x %>%
     filter(a != 0))

[[1]]
  a b
1 1 2
2 2 3
3 3 5
4 5 1

[[2]]
  a b
1 1 2
2 2 3
3 3 5
4 5 1
1 голос
/ 30 января 2020

У вас есть другие варианты, используя lapply как:

#Without dplyr
lapply(list.df, function(x)x["a"!=0,])


#With dplyr
library(dplyr)
lapply(list.df, function(x)filter(x,a!=0))

# Result  
# [[1]]
# a b
# 1 1 2
# 2 2 3
# 3 3 5
# 4 5 1
# 
# [[2]]
# a b
# 1 1 2
# 2 2 3
# 3 3 5
# 4 5 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...