У меня есть несколько фреймов данных, которые считываются в r из электронных таблиц. Все кадры данных имеют одинаковые столбцы, но некоторые наблюдения внутри столбцов вводятся неправильно (во время ввода данных), а r рассматривает некоторые как posixct, а другие как целые числа и факторы и т. Д. Проблема в том, что у функции rbindlist есть проблемы с этим на некоторых машинах (это может зависеть от версии data.table). Хорошей новостью является то, что эта проблемная переменная не анализируется и может быть удалена. Как мне отфильтровать несколько фреймов данных в списке, чтобы сделать это аккуратно?

Я пробовал другой код, но ни один, кажется, не работает во всех фреймах данных в списке. Вот некоторые фиктивные данные:

lst <- list(a = 1:4, b = 4:8, c = 8:10)
lst1 <- list(a = 1:4, b = 4:8, c = 8:10)

iist2<-list(lst, lst1)

if("b" %in% names(iist2)) iist2 <- iist2[ - which(names(iist2) == "b")]

Но это не работает, однако, если это просто lst или lst1, то работает выше. любая помощь будет принята с благодарностью.

r
0
Tom 12 Апр 2019 в 15:36

2 ответа

Лучший ответ

Можешь попробовать

lapply(iist2, function(i)i[!names(i) %in% 'b'])
1
Sotos 12 Апр 2019 в 12:39

Мы можем использовать discard или keep

library(purrr)
map(iist2, ~ keep(.x, names(.x) != "b"))
#[[1]]
#[[1]]$a
#[1] 1 2 3 4

#[[1]]$c
#[1]  8  9 10


#[[2]]
#[[2]]$a
#[1] 1 2 3 4

#[[2]]$c
#[1]  8  9 10
1
akrun 12 Апр 2019 в 12:47