удаление элемента из нескольких фреймов данных, находящихся в списке - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть несколько фреймов данных, которые считываются в 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, то вышеприведенное работает. любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Мы можем использовать 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 голос
/ 12 апреля 2019

Можно попробовать

lapply(iist2, function(i)i[!names(i) %in% 'b'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...