我想刪除數據框中的列df
其中0和以下是我的語法。刪除有0的列
df_new<-df[,which(colSums(df) !=0)]
我得到一個錯誤
錯誤colSums(DF): 'X' 必須是數字。
我在做什麼錯?
我想刪除數據框中的列df
其中0和以下是我的語法。刪除有0的列
df_new<-df[,which(colSums(df) !=0)]
我得到一個錯誤
錯誤colSums(DF): 'X' 必須是數字。
我在做什麼錯?
這應該工作
df[,sapply(df,function(V) sum(V==0)==0)]
編輯
上面的代碼自然應該對所有數字列工作,但什麼因素列或字符列用「0」,這樣做,我們有相同的預期的行爲?我們可以做一些測試:
factor(letters[1:5]) == 0
# FALSE FALSE FALSE FALSE FALSE
factor(c(0:5)) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
as.character(c(0:5)) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
c(0,letters[1:5]) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
factor(c(0,letters[1:5])) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
會發生什麼事是R轉換的RHS 0
(數字)爲"0"
(人物),也是因素列在LHS成字符。所以,如果你真的想刪除任何列爲「0」的列,那麼代碼通常應該可以正常工作,不管它是數字還是字符。但是,如果目的是要始終保持字符或因素柱,然後某事像這樣可能有助於
df[,sapply(df,function(V) sum(V==0)==0 | is.character(V) | is.factor(V))]
也許:你有一個因子列 –
@ 42-謝謝指出!請參閱更新。 – platypus
在你的'df'有一些列不屬於數字。你需要在應用'colSums'之前刪除它們。要檢查'df'中的列的類,請執行'str(df)'並忽略本質上不是數字的列。 –