【发布时间】:2014-07-17 10:13:35
【问题描述】:
我有一个包含 65 个变量的列表,我想将数字变量和分类变量列表分开。
这个任务的命令是什么。
【问题讨论】:
标签: r
我有一个包含 65 个变量的列表,我想将数字变量和分类变量列表分开。
这个任务的命令是什么。
【问题讨论】:
标签: r
您可以这样做(假设您的 data.frame 名为 df):
sapply(df, class)
确实,带有时间变量的输出不太漂亮:
library(lubridate)
df <- data.frame(V1 = character(10),
V2 = numeric(10),
V3 = ymd(paste("2014-05", 21:30, sep="-")))
sapply(df, class)
##$V1
##[1] "factor"
##
##$V2
##[1] "numeric"
##
##$V3
##[1] "POSIXct" "POSIXt"
但它仍然可以识别数字或因子变量,例如没有时间变量:
names(df)[sapply(df, class) == "factor"]
##[1] "V1"
# for time variable it's less obvious indeed...
names(df)[grepl("POSIXct", sapply(df, class))]
##[1] "V3"
【讨论】:
sapply():只要数据框中有时间变量,这就会失败。
mode?
您可以使用split 和sapply 将变量组合在一起:
split(names(iris),sapply(iris, function(x) paste(class(x), collapse=" ")))
$factor
[1] "Species"
$numeric
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
注意使用paste 将任何多类对象的类名折叠在一起。
【讨论】:
sapply():只要数据框中有时间变量,这就会失败。