因子列从csv读取到data.table或data.frame

时间:2016-12-18 00:53:13

标签: r dataframe data.table

我尝试将data.table用于csv - 带有因子列的文件,并面临无法解释的行为。以下是示例代码:

> df <- read.csv('avgpm25.csv', colClasses = c('numeric', 'character', 'factor', 'numeric', 'numeric'))
> dt <- fread('avgpm25.csv', colClasses = c('numeric', 'character', 'factor', 'numeric', 'numeric'))

> summary(dt$region)
   Length     Class      Mode 
      576 character character 
> summary(df$region)
east west 
 442  134 

因此,可以看出data.table无法读取因子列,但数据帧可以。这种行为的原因是什么?使用data.table处理因子列的正确方法是什么?

更新: 有列的列表

> colnames(df)
[1] "pm25"      "fips"      "region"    "longitude" "latitude" 

当我尝试stringsAsFactors = TRUE时,我有字符列&#34; fips&#34;也成了因素。同时数据框保留原始类型。

> dt2 <- fread('avgpm25.csv', colClasses = c('numeric', 'character', 'factor', 'numeric', 'numeric'), stringsAsFactors = T)

> summary(dt)
      pm25            fips              region            longitude          latitude    
 <skipped>        Length:576         Length:576           <skipped>  
                  Class :character   Class :character   
                  Mode  :character   Mode  :character     

> summary(dt2)
      pm25             fips      region      longitude          latitude    
<skipped>         01003  :  1   east:442     <skipped>
                  01027  :  1   west:134   
                  01033  :  1              
                  01049  :  1              
                  01055  :  1              
                  01069  :  1              
                  (Other):570                                               
> summary(df)
      pm25            fips            region      longitude          latitude    
 <skipped>        Length:576         east:442     <skipped>
                  Class :character   west:134     
                  Mode  :character              

0 个答案:

没有答案