【发布时间】:2013-01-29 01:18:01
【问题描述】:
我想用read.table() 在 R 中导入一个表(.txt 文件)。我表中的一列是一个包含九个数字的 ID - 一些 ID 以 0 开头,其他以 1 或 2 开头。
R 会截断第一个 0(012345678 变为 12345678),这会导致在使用此 ID 合并另一个表时出现问题。
谁能给我一个提示如何解决这个问题?
【问题讨论】:
标签: r import read.table zero-padding
我想用read.table() 在 R 中导入一个表(.txt 文件)。我表中的一列是一个包含九个数字的 ID - 一些 ID 以 0 开头,其他以 1 或 2 开头。
R 会截断第一个 0(012345678 变为 12345678),这会导致在使用此 ID 合并另一个表时出现问题。
谁能给我一个提示如何解决这个问题?
【问题讨论】:
标签: r import read.table zero-padding
正如 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
【讨论】:
as.is=T 对我不起作用。
这是一个基于条件向行添加前导零的 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])
}
}
【讨论】:
一个可重现的例子会很好,但是:使用read.table() 的colClasses 参数来指定您希望将此列读取为character 变量,而不是numeric。或者在读入它们后将它们重新放入character 变量中,使用sprintf 用前导零填充数字。 (前者可能更容易。)
【讨论】: