【问题标题】:is.numeric and is.numeric option in apply showing different result应用中的 is.numeric 和 is.numeric 选项显示不同的结果
【发布时间】:2013-10-22 10:11:42
【问题描述】:

我有一个数据集,其中包含大约 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 包含数据框中的所有变量列表。

附上实时截图。

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

感谢任何人的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

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

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

    (也可以尝试将is.numeric 换成class。)

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

        如果你这样做

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

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

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

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

        【讨论】:

        • iris[varlist[1]]iris[,colnames(iris) %in% varlist[1]] 是相当不正当的索引。只需使用iris[, 1]iris[[1]]
        • 没问题。您可以使用 R 中已经可用的数据集,如 irismtcars(或其他数据集,运行 data() 以查看可用数据集的列表)。也看看stackoverflow.com/questions/5963269/…
        • @Richie 我知道,但我只是想从他的方法开始,以展示不同之处。
        猜你喜欢
        • 2016-08-30
        • 2021-12-27
        • 2020-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        相关资源
        最近更新 更多