2013-02-14 64 views
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)]" 

有誰知道爲什麼列名時不保留只有一列?

回答

2

你被R FAQ咬了。將,drop = FALSE添加到您的數據幀子集(並注意到您不再需要的副作用as.data.frame。)

+0

謝謝!猜猜還有很多我仍需要了解R! – obug 2013-02-14 20:07:50