如何避免:read.table截断以0开头的数值

时间:2013-02-13 13:16:12

标签: r import read.table zero-padding

我想在R中使用.txt导入表格(read.table()文件)。我表中的一列是一个带有九个数字的ID - 一些id以0开头,另一列以1或2开头。

R截断前0(012345678变为12345678),这会导致使用此ID合并另一个表时出现问题。

有人能给我一个如何解决问题的提示吗?

3 个答案:

答案 0 :(得分:14)

正如Ben的回答所说,colClasses是更简单的方法。这是一个例子:

read.table(text = 'col1 col2
           0012 0001245',
           head=T,
           colClasses=c('character','numeric'))

  col1 col2
1 0012 1245      ## col1 keep 00 but not col2

答案 1 :(得分:3)

可重现的示例很不错,但是:使用colClasses参数read.table()来指定您希望将此列读取为character变量,而不是numeric }。或者在阅读它们之后将它们恢复为character变量,使用sprintf用前导零填充数字。 (前者可能更容易。)

答案 2 :(得分:0)

这是一个for循环,用于根据条件向行添加前导零。虽然这是一个事后解决方案(在读取表格后添加前导0 ),但它对我有用,所以我想分享:

我们以一列邮政编码为例。所有值应包含5位数(例如01234),但R删除前导零(因此'01234'变为'1234')。您可以使用以下代码向仅包含4个字符的所有单元格添加尾随零:

for (i in 1:nrow(df)){
  if(nchar(df$zipCode[i])<5){
    df$zipCode[i]<- paste0('0',df$zipCode[i])
  }
}