【问题标题】:read.xlsx and colClassesread.xlsx 和 colClasses
【发布时间】:2013-08-19 05:04:35
【问题描述】:

有谁知道为什么论点colClasses 似乎在read.xlsx 中不起作用?

我创建了一个示例 *.xlsx 文件:

> library(xlsx)
> d1 = data.frame(A=LETTERS[1:3], B=letters[1:3], C=1:3, D=c(1.1, NA, NA))
> str(d1)
'data.frame':   3 obs. of  4 variables:
 $ A: Factor w/ 3 levels "A","B","C": 1 2 3
 $ B: Factor w/ 3 levels "a","b","c": 1 2 3
 $ C: int  1 2 3
 $ D: num  1.1 NA NA
> write.xlsx(d1, 'test.xlsx', sheetName='Sheet1', row.names=F, showNA=F)

然后尝试使用read.xlsx 读取它,不带和带colClasses 参数:

> d2 = read.xlsx('test.xlsx', sheetName='Sheet1')
> str(d2)
'data.frame':   3 obs. of  4 variables:
 $ A: Factor w/ 3 levels "A","B","C": 1 2 3
 $ B: Factor w/ 3 levels "a","b","c": 1 2 3
 $ C: num  1 2 3
 $ D: num  1.1 NA NA
> d2 = read.xlsx('test.xlsx', sheetName='Sheet1', colClasses=c(B='character', 'A'='character'))
> str(d2)
'data.frame':   3 obs. of  4 variables:
 $ A: Factor w/ 3 levels "A","B","C": 1 2 3
 $ B: Factor w/ 3 levels "a","b","c": 1 2 3
 $ C: num  1 2 3
 $ D: num  1.1 NA NA

问题是colClasses好像没有效果。有什么想法吗?

感谢您的帮助。

阿列克谢

附:我有 R 3.0.1,xlsx 0.5.1

【问题讨论】:

    标签: r r-xlsx


    【解决方案1】:

    colClasses= 正在工作,但问题是在您的系统上导入数据时的默认操作是将字符列转换为因子。

    如果您导入 test.xlsx 并将所有列设置为 "character",您会看到所有列都作为因子(也是数字)。

    d2 = read.xlsx('test.xlsx', sheetName='Sheet1', colClasses=rep("character",4))
     str(d2)
    'data.frame':   3 obs. of  4 variables:
     $ A: Factor w/ 3 levels "A","B","C": 1 2 3
     $ B: Factor w/ 3 levels "a","b","c": 1 2 3
     $ C: Factor w/ 3 levels "1","2","3": 1 2 3
     $ D: Factor w/ 1 level "1.1": 1 NA NA
    

    为确保字符不会转换为因子,您可以将参数 stringsAsFactors=FALSE 添加到函数 read.xlsx()

    d2 = read.xlsx('test.xlsx', sheetName='Sheet1', 
                    colClasses=c(B='character', A='character'),stringsAsFactors=FALSE)
    
    str(d2)
    'data.frame':   3 obs. of  4 variables:
     $ A: chr  "A" "B" "C"
     $ B: chr  "a" "b" "c"
     $ C: num  1 2 3
     $ D: num  1.1 NA NA
    

    【讨论】:

    • Didzis,谢谢,这很好用。我忘记了stringsAsFactors 进行第二次转换,将字符向量转换为因子。谢谢,很抱歉这么久忘记这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2012-09-19
    • 1970-01-01
    • 2011-02-17
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多