1

データフレームの各列の欠落値のパーセンテージを計算し、事前設定されたしきい値を超える列を削除する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つしかないのに、なぜ列名が保持されないのか誰かが知っていますか?

4

1 に答える 1

2

あなたはR FAQに噛まれました。データ フレームのサブセットに追加,drop = FALSEします (副作用として、不要になったことに気付きますas.data.frame)。

于 2013-02-14T20:00:18.990 に答える