Как удалить NA из всех data.frames в среде [duplicate]

Оба типа замкнутых символов - это строки. Один тип цитаты удобно использовать для включения другого типа цитаты. "'" и '"'. Самая большая разница между типами котировок заключается в том, что ссылки с закрытыми идентификаторами заменяются внутри двойных кавычек, но не внутри одиночных кавычек.

7
задан Rich Scriven 26 August 2014 в 20:57
поделиться

6 ответов

Из вашего опубликованного кода я бы рекомендовал вам начать новый сеанс R и снова прочитать файлы со следующим кодом

do.call(rbind, lapply(list.files(pattern = ".csv"), read.csv))
6
ответ дан Rich Scriven 27 August 2018 в 23:58
поделиться

Если у вас есть только данные с одинаковым количеством столбцов и имен столбцов в вашей глобальной среде, то следующее должно работать (не-data.frame объект не имеет значения):

do.call(rbind, eapply(.GlobalEnv,function(x) if(is.data.frame(x)) x))
4
ответ дан James 27 August 2018 в 23:58
поделиться

Это небольшое улучшение в ответе MentatOfDune, которое не захватывает data.frames с несколькими классами:

ls()[grepl('data.frame', sapply(ls(), function(x) class(get(x))))]
4
ответ дан Jonathan Hill 27 August 2018 в 23:58
поделиться

Функция ls перечисляет все вещи в вашей среде. Функция get получает переменную с заданным именем. Вы можете использовать функцию class, чтобы получить класс переменной.

Если вы поместите их все вместе, вы можете сделать это:

ls()[sapply(ls(), function(x) class(get(x))) == 'data.frame']

, который вернет символ вектор данных. Кадры в текущей среде.

3
ответ дан MentatOfDune 27 August 2018 в 23:58
поделиться

Эта функция должна возвращать правильный список со всеми data.frames в качестве элементов

dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))

, тогда вы можете их перевернуть с помощью

do.call(rbind, dfs)

Конечно, это ужасно глупо есть куча data.frames, лежащих вокруг, которые так связаны, что вы хотите rbind их. Похоже, что они, вероятно, должны были быть в списке в первую очередь.

Я рекомендую вам сказать от assign(), что всегда является признаком того, что, вероятно, это не так. Попробуйте

temp <- list.files(pattern="*.csv")
dfs <- lapply(temp, read.csv)

, который должен немедленно вернуть список.

16
ответ дан MrFlick 27 August 2018 в 23:58
поделиться

Чтобы улучшить ответ MentatOfDune (отличное имя пользователя кстати):

ls()[sapply(ls(), function(x) any(class(get(x)) == 'data.frame'))]

Это также поддерживает tibbles (например, созданный с помощью dplyr), поскольку они содержат несколько классов, где data.frame один из них.

0
ответ дан MS Berends 27 August 2018 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: