1

我创建了一个 R 脚本,它计算数据框每一列中缺失值的百分比,然后删除超过预设阈值的列。需要维护 列名。

当列删除后数据框中的列多于一列时,名称将保留,但只有一列时不保留。

列名保持不变时的代码

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)]"

有谁知道为什么只有一列时不保留列名?

4

1 回答 1

2

你被R FAQ咬了。添加,drop = FALSE到您的数据框子集(并且您注意到您不再需要的副作用as.data.frame。)

于 2013-02-14T20:00:18.990 回答