Удалите столбцы из dataframe, где некоторые из значений NA
у меня есть фрейм данных, где некоторые из значений NA. Я хотел бы удалить эти столбцы.
мои данные.рамка выглядит так
v1 v2
1 1 NA
2 1 1
3 2 2
4 1 1
5 2 2
6 1 NA
Я попытался оценить среднее значение col и выбрать значение столбца !=Н. Я пробовал это утверждение, оно не работает.
data=subset(Itun, select=c(is.na(colMeans(Itun))))
Я получил ошибку,
ошибка: "x" должен быть массивом по крайней мере двух измерений
кто-нибудь может мне помочь?
5 ответов
данные:
Itun <- data.frame(v1 = c(1,1,2,1,2,1), v2 = c(NA, 1, 2, 1, 2, NA))
это удалит все столбцы, содержащие по крайней мере один NA
:
Itun[ , colSums(is.na(Itun)) == 0]
альтернативный способ-использовать apply
:
Itun[ , apply(Itun, 2, function(x) !any(is.na(x)))]
вот удобный способ сделать с помощью dplyr
функции select_if()
. Объединить не (!
),any()
и is.na()
, что эквивалентно выбору всех столбцов, которые не содержат значений NA.
library(dplyr)
Itun %>%
select_if(~ !any(is.na(.))
базовый метод R, связанный с apply
ответы
Itun[!unlist(vapply(Itun, anyNA, logical(1)))]
v1
1 1
2 1
3 2
4 1
5 2
6 1
здесь vapply
используется, поскольку мы работаем над списком, и,apply
, он не принуждает объект к матрице. Кроме того, поскольку мы знаем, что выход будет логическим вектором длины 1, мы можем передать это в vapply
и потенциально получить небольшое повышение скорости. По той же причине, я использовал anyNA
вместо any(is.na())
.