0

我有一个数据集,其中包含大约 200 个字段和 1000000 条记录,格式如下:

Acc Field1 Field2 Field3 .....    
101   23   34   78    
102   6    1.2  89    
.
.
.

当我输入命令

apply(dat3[varlist[9]],2,is.numeric)

结果,我得到了 TRUE 字段名称的确认,但是当我尝试测试 as 时is.numeric(dat3[varlist[9]]),我收到了 FALSE 作为结果。

其中 dat3 是我正在处理的数据框,varlist 是使用命令创建的:

varlist <- names(dat3) 

varlist 包含数据框中的所有变量列表。

附上实时截图。

我不明白我在这里做错了什么。

感谢任何人的帮助。

在此处输入图像描述

4

3 回答 3

4

在数据框上逐列执行测试的标准方法是使用sapply.

sapply(mtcars, is.numeric)
sapply(CO2, is.numeric)

(也尝试交换is.numericclass

于 2013-10-22T10:36:54.720 回答
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
于 2013-10-22T10:33:34.790 回答
1

如果你这样做

varlist <- names(iris)
iris[varlist[1]]

您正在使用选定的列而不是变量本身定义一个新的数据框。

iris[,colnames(iris) %in% varlist[1]]
is.numeric( iris[,colnames(iris) %in% varlist[1]])
#[1] TRUE

下次请尝试做一个可重复的例子

于 2013-10-22T10:34:40.990 回答