R - Как удалить NA при использовании ASSIGN с FOR L OOP? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть некоторый код, который импортирует фрейм данных (KeywordsDF), и, используя FOR L OOP, он (используя имена столбцов) создает новые переменные в зависимости от количества столбцов в нем:

keywordsDF = read_excel("//Users//n//Desktop//Keywords.xlsx")

keywordList = colnames(keywordsDF)

for (i in seq_along(keywordList)) {
  assign(keywordList[i], keywordsDF[keywordList[i]])
}

Все это прекрасно работает. Однако, поскольку столбцы имеют разную длину, они импортируют NA в данные.


Обычно я удаляю эти NA для каждого столбца, например:

consumption = keywordsDF$Consumption[!is.na(keywordsDF$Consumption)]


Но я не уверен, как это сделать в FOR L OOP (где я не знаю имен столбцов). Т.е. куда мне поставить !is.na? Кажется, у меня ничего не работает.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Вы можете использовать keywordsDF[[keywordList[i]]] в любом месте, которое бы использовали keywordsDF$Consumption, поэтому

# spaced to make the substitution line up
consumption =          keywordsDF$Consumption      [!is.na( keywordsDF$Consumption       )]
assign(keywordList[i], keywordsDF[[keywordList[i]]][!is.na( keywordsDF[[keywordList[i]]] )]

Но я бы посоветовал вам не использовать assign, как это ... список может быть лучше как kw_no_na = lapply(keywordsDF[keywordList], na.omit), затем используйте kw_no_na$consumption или kw_no_na[["consumption"]].

1 голос
/ 06 февраля 2020

Вы можете просто использовать na.omit()?

for (i in seq_along(keywordList)) {
  assign(keywordList[i], na.omit(keywordsDF[keywordList[i]]))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...