我有一个数据集,其中包含大约200个字段和1000000条记录,格式如下:
Acc Field1 Field2 Field3 .....
101 23 34 78
102 6 1.2 89
.
.
.
当我输入命令
时apply(dat3[varlist[9]],2,is.numeric)
我得到了字段名称的确认结果为TRUE,但是当我尝试测试为is.numeric(dat3[varlist[9]])
时,我收到了一个FALSE。
其中dat3是我正在处理的数据帧,varlist是使用命令创建的:
varlist <- names(dat3)
varlist包含数据框中的所有变量列表。
附件是实时截图。
我不明白我在这里做错了什么。
任何人的帮助都表示赞赏。
答案 0 :(得分:4)
在数据框上逐列执行测试的标准方法是使用sapply
。
sapply(mtcars, is.numeric)
sapply(CO2, is.numeric)
(尝试将is.numeric
换成class
。)
答案 1 :(得分:2)
以这种方式在data.frame上使用[
将返回另一个(较小的数据帧)。您需要使用[[
,或使用[
的多索引版本以便应用删除。例如:
class(mtcars[3])
[1] "data.frame"
is.numeric(mtcars[3])
[1] FALSE
is.numeric(mtcars[[3]])
[1] TRUE
is.numeric(mtcars[,3])
[1] TRUE
答案 2 :(得分:1)
如果你这样做
varlist <- names(iris)
iris[varlist[1]]
您正在使用所选列定义新数据框,而不是变量本身。
DO
iris[,colnames(iris) %in% varlist[1]]
is.numeric( iris[,colnames(iris) %in% varlist[1]])
#[1] TRUE
下次请尝试制作可重现的例子