2013-10-03 96 views
6

我想將數據集分成具有因子變量和非因子變量的部分。R sapply is.factor

我希望做類似:

這部分工作:

factorCols <- sapply(df1, is.factor) 
factorDf <- df1[,factorCols] 

這部分將不工作:

nonFactorCols <- sapply(df1, !is.factor) 

由於這個錯誤:

Error in !is.factor : invalid argument type 

有沒有ac正確的方式來做到這一點?

+1

[相關問題](http://stackoverflow.com/questions/15593934/why-cant-qnorm-in-sapply/15594648#15594648)雖然問題不同以至於不能重複,但背後的原因是什麼on是相同的 –

+0

你可能不需要將你的df分成因子列和非因子列,但是爲此,有...... lapply(split(colnames(DF),factorCols),function(x)DF [,x,drop = FALSE])'from here:http://stackoverflow.com/a/15118036/1191259 – Frank

回答

8

正確方法:

nonFactorCols <- sapply(df1, function(col) !is.factor(col)) 
# or, more efficiently 
nonFactorCols <- !sapply(df1, is.factor) 
# or, even more efficiently 
nonFactorCols <- !factorCols 
+0

非常感謝! – screechOwl

8

約書亞給你正確的方法來做到這一點。至於爲什麼sapply(df1, !is.factor)沒有工作:

sapply期待的功能。 !is.factor不是一個函數。 bang運算符返回一個邏輯值(儘管它不能以is.factor作爲參數)。

或者,您可以使用Negate(is.factor),它實際上會返回一個函數。

+1

非常酷的解決方案'Negate'!不知道。 – cryo111