假設只選擇數值列,你有這樣的data.frame:從數據幀
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
你會如何選擇僅在X是數字的那些列?
假設只選擇數值列,你有這樣的data.frame:從數據幀
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
你會如何選擇僅在X是數字的那些列?
由於數據幀是一個列表,我們可以使用該列表,應用功能:
nums <- sapply(x, is.numeric)
從基部包然後標準子集
x[ , nums]
Filter()
是針對使用 - 功能完善案例: 您只需代碼:
Filter(is.numeric, x)
它也比select_if()
快得多:
library(microbenchmark)
microbenchmark(
dplyr::select_if(mtcars, is.numeric),
Filter(is.numeric, mtcars)
)
回報(我的電腦上)的60微秒Filter
中位數,而21 000微秒dplyr
(350X更快)。
這個交替代碼給其他答案:
x[, sapply(x, class) == "numeric"]
與data.table
x[, lapply(x, is.numeric) == TRUE, with = FALSE]
'training'從哪裏來?不應該讀'x'嗎? – Uwe 2016-11-13 16:16:41
確定複製並粘貼並且不檢查問題 – 2016-11-13 16:22:54
這是對選定答案的更多評論,而不是唯一答案。 – 2016-11-13 17:55:14
的dplyr包的select_if(
)函數是一個優雅的解決方案:
library("dplyr")
select_if(x, is.numeric)
這是我的解決方案,但它看起來像'select_if()'現在已經摺舊了。 – ApeWithPants 2018-01-03 18:23:03
如果你有很多因素變量,你可以使用select_if
功能。 安裝dplyr軟件包。有許多功能通過滿足條件來分隔數據。你可以設置條件。
像這樣使用。
categorical<-select_if(df,is.factor)
str(categorical)
看起來像這個較早的答案的副本http://stackoverflow.com/a/40808873/170352 – 2017-01-06 04:07:09
PCAmixdata已functon一個給定的數據幀「YourDataframe」的splitmix其將量化(數值數據)和定性(分類數據),如下所示的庫:
install.packages("PCAmixdata")
library(PCAmixdata)
split <- splitmix(YourDataframe)
X1 <- split$X.quanti(Gives numerical columns in the dataset)
X2 <- split$X.quali (Gives categorical columns in the dataset)
謝謝,我發現有一個剛因爲你發佈它x [,sapply(x,is.numeric)] – 2011-05-02 22:31:12
'x [nums]'或'x [sapply(x,is.numeric)]'也適用。他們總是返回'data.frame'。比較'x [1]'和'x [,1]' - 第一個是data.frame,第二個是矢量。如果想阻止轉換,那麼必須使用'x [,1,drop = FALSE]'。 – Marek 2011-05-03 11:46:47
「!is.numeric」是否工作? – PatrickT 2013-11-29 10:17:32