R:确定数据帧中数值变量的优雅方法
下面是我用来在数据框中查找数值变量的代码:R:确定数据帧中数值变量的优雅方法,r,vectorization,R,Vectorization,下面是我用来在数据框中查找数值变量的代码: Data <- iris numericvars <- NULL for (Var in names(Data)) { if(class(Data[,Var]) == 'integer' | class(Data[,Var]) == 'numeric') { numericvars <- c(numericvars,Var) } } numericvars Data这是一个非常简单的单行程序,带有sa
Data <- iris
numericvars <- NULL
for (Var in names(Data)) {
if(class(Data[,Var]) == 'integer' | class(Data[,Var]) == 'numeric') {
numericvars <- c(numericvars,Var)
}
}
numericvars
Data这是一个非常简单的单行程序,带有sapply
:
sapply(Data, is.numeric)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# TRUE TRUE TRUE TRUE FALSE
# is.numeric should pick up integer columns too
Data$Species <- as.integer(Data$Species)
sapply(Data, is.numeric)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# TRUE TRUE TRUE TRUE TRUE
sapply(数据,是数字)
#萼片。长萼片。宽花瓣。长花瓣。宽种
#真假
#is.numeric也应该选择整数列
数据$Species这里使用sapply()
或lappy()
似乎合乎逻辑:
sapply(iris, function(x) class(x) %in% c("integer","numeric"))
其中:
> sapply(iris, function(x) class(x) %in% c("integer","numeric"))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
TRUE TRUE TRUE TRUE FALSE
值得注意的是,在循环中,您在循环的每次迭代中都在增加numericvars
向量;在R中,这是一个很大的禁忌!它强制R每次复制和展开向量。事先分配足够的存储空间,并填写物品;在这里,这意味着创建numericvars
as
numericvars <- character(length = ncol(iris))
numericvars这有点紧:
R> sapply(colnames(iris), function(x) inherits(iris[,x], c("numeric","integer")))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
TRUE TRUE TRUE TRUE FALSE
R>
plyr中还有colwise()
、numcolwise()
和catcolwise()
colwise()
将在向量上运行的函数转换为在数据帧上按列运行的函数numcolwise
和catcolwise
分别提供仅对数值变量和离散变量进行操作的版本
library(plyr)
colwise(is.numeric)(Data)
> colwise(is.numeric)(Data)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 TRUE TRUE TRUE TRUE FALSE
循环中不断增长的对象是不允许的(numericvars Ooops。我想我来晚了一会儿。是否有任何理由对列名而不是通过data.frame
本身sapply(iris,inherits,c(“numeric”,“integer”))
物种在第二次尝试中是真实的。@Dirk:…根据,它应该是.numeric
。在这里睡着了--我错过了你将因子转换为整数的过程。眼睛盯着冰球,还是盯着球员?和足球一样;眼睛盯着球员的下半身。
library(plyr)
colwise(is.numeric)(Data)
> colwise(is.numeric)(Data)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 TRUE TRUE TRUE TRUE FALSE