【问题标题】:Data type issue, integer data into R from csv数据类型问题,从csv到R的整数数据
【发布时间】:2011-11-07 19:40:52
【问题描述】:

我在 R 中有一个 data.frame,它是根据此处的示例 1-3 数据集构建的: http://riskfactor.cancer.gov/diet/usualintakes/dataset.html

我使用 Stat Transfer 将其从 SAS 转换为 ASCII,并保存为 csv。我已使用 read.csv 命令将数据导入 R:

t_0104nc <- read.csv("foo.csv",header=T)

数据在 data.frame 结构中。此文件中有一些与权重相关的列(RNDW 到 RNDW32)。虽然这些看起来是整数,但在 Excel 中查看数据时,单元格具有通用格式。 R 已将数据加倍。

我正在使用 RNDW1,我需要确认它是整数。但是,输入 typeof(RNDW1) 和 storage.mode(RNDW1) 都会将数据显示为 double。

对我来说,测试我在该列中只有整数值的最有效方法是什么?我不想强制数据,因为非整数的存在表明数据存在强制无法修复的基本问题。

另外,我想知道是否有某种方法可以导入数据,以便将其存储为 R 中最简单的数据类型 - 然后应该将这些值作为整数导入。有的数据是整数,有的数据是单数或双数,所以数据不都是同一类型。

根据以下建议进行更新。我只需要一个简单的布尔真/假测试,所以我使用了:

if(isTRUE(all.equal(x, xi &lt;- as.integer(x)))) y="TRUE" else y="FALSE"

y

然后返回一个 true 或 false 值来指示测试的整体结果。感谢我收到的所有(快速!)帮助,我对代码和对它的理解感到满意。

【问题讨论】:

    标签: r csv


    【解决方案1】:

    all.equal 提供了一种方法来测试列中的所有值是否都是整数值。

    这是一个可以做你喜欢的功能:

    careful.as.integer <- function(x) {
        if(!is.numeric(x)) return(x) # For factor, character, and logical vectors 
        if(all.equal(x, as.integer(x))== TRUE) {
              as.integer(x)
         } else {
              x
         }
    }
    
    DAT <- data.frame(a = c(NA, 1:3), 
                      b = c(1:2, 3.3, NA), 
                      species = c("cat", "dog", "goat", "okapi"))
    
    data.frame(lapply(DAT, careful.as.integer))
    #    a   b species
    # 1 NA 1.0     cat
    # 2  1 2.0     dog
    # 3  2 3.3    goat
    # 4  3  NA   okapi
    

    【讨论】:

    • 为了缩短/混淆你可以使用if(isTRUE(all.equal(x, xi &lt;- as.integer(x)) xi else x(我认为)
    • @BenBolker -- 实际上我有点喜欢这样(最后加上)))。我想我会让isTRUE 成为我的每日新词之一。
    • @BenBolker ...虽然我想它确实每次都会用一个额外的分配步骤来换取它有时避免的as.integer转换。
    • @JoshO'Brien - 感谢代码,因为我的数据集有 10287 行长,所以我在末尾添加了 na.fail(foo$x) 以查看是否触发了错误消息。跨度>
    • @BenBolker - 我收到您的代码的错误消息,我尝试过: if(isTRUE(all.equal(dataa$REPLICATE_VAR, dataa$REPLICATE_NEW
    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2021-04-24
    • 2015-03-02
    • 2016-11-24
    • 2019-04-07
    • 2010-11-22
    相关资源
    最近更新 更多