データフレームの各列の欠落値のパーセンテージを計算し、事前設定されたしきい値を超える列を削除するRスクリプトを作成しました。列名を維持する必要があります。
名前は、列の削除後にデータフレームに複数の列がある場合は維持されますが、列が1つしかない場合は維持されません。
列名が同じである場合のコード
df <- data.frame(A=rnorm(10, 10, 1), B=rep(NA, 10), C=rnorm(10, 10, 1))
threshold <- 80
pmiss <- function(x) {
ifelse(sum(is.na(x))/length(x)*100 > threshold, TRUE, FALSE)
}
temp <- sapply(df, pmiss)
deletecols <- names(temp[temp==TRUE])
df <- as.data.frame(df[,!(names(df) %in% deletecols)])
names(df) #prints
[1] "A" "C"
ただし、dfを次のように定義します
df <- data.frame(A=rnorm(10, 10, 1), B=rep(NA, 10))
と
names(df) #prints
[1] "df[, !(names(df) %in% deletecols)]"
列が1つしかないのに、なぜ列名が保持されないのか誰かが知っていますか?