列(変数)にすべての欠損値(NA
、<NA>
)。以下は、関数のフラグメントです。
test1 <- data.frame (matrix(c(1,2,3,NA,2,3,NA,NA,2), 3,3))
test2 <- data.frame (matrix(c(1,2,3,NA,NA,NA,NA,NA,2), 3,3))
na.test <- function (data) {
if (colSums(!is.na(data) == 0)){
stop ("The some variable in the dataset has all missing value,
remove the column to proceed")
}
}
na.test (test1)
Warning message:
In if (colSums(!is.na(data) == 0)) { :
the condition has length > 1 and only the first element will be used
Q1:上記のエラーと修正はなぜですか?
Q2:どの列にすべてNA
があるかを見つける方法はありますか。たとえば、リスト(変数名または列番号)を出力しますか?
これはsapply
と小さな匿名関数を使うと簡単です:
sapply(test1, function(x)all(is.na(x)))
X1 X2 X3
FALSE FALSE FALSE
sapply(test2, function(x)all(is.na(x)))
X1 X2 X3
FALSE TRUE FALSE
そして関数内:
na.test <- function (x) {
w <- sapply(x, function(x)all(is.na(x)))
if (any(w)) {
stop(paste("All NA in columns", paste(which(w), collapse=", ")))
}
}
na.test(test1)
na.test(test2)
Error in na.test(test2) : All NA in columns 2
Dplyrで
ColNums_NotAllMissing <- function(df){ # helper function
as.vector(which(colSums(is.na(df)) != nrow(df)))
}
df %>%
select(ColNums_NotAllMissing(.))
example:
x <- data.frame(x = c(NA, NA, NA), y = c(1, 2, NA), z = c(5, 6, 7))
x %>%
select(ColNums_NotAllMissing(.))
または、その逆
Cols_AllMissing <- function(df){ # helper function
as.vector(which(colSums(is.na(df)) == nrow(df)))
}
x %>%
select(-Cols_AllMissing(.))
すべての値が欠落している列を見つけるには
allmisscols <- apply(dataset,2, function(x)all(is.na(x)));
colswithallmiss <-names(allmisscols[allmisscols>0]);
print("the columns with all values missing");
print(colswithallmiss);
列にすべての欠損値があるかどうかをテストするには:
apply(test1,2,function(x) {all(is.na(x))})
どの列にすべての欠損値があるかを取得するには:
test1.nona <- test1[ , colSums(is.na(test1)) == 0]
これにより、NAで満たされた列名が生成されます。
library(purrr)
df %>% keep(~all(is.na(.x))) %>% names
次のコマンドは、NA値を持つ列を持つNiceテーブルを提供します。
sapply(dataframe, function(x)all(any(is.na(x))))
これは、最初に得た回答の改善であり、場合によっては適切に機能しません。
各列のNAの数を見つけるためのdplyrアプローチ:
df %>%
summarise_all((funs(sum(is.na(.)))))