如何避免:read.table 截断以 0 开头的数值
Posted
技术标签:
【中文标题】如何避免:read.table 截断以 0 开头的数值【英文标题】:How to avoid: read.table truncates numeric values beginning with 0 【发布时间】:2013-01-29 01:18:01 【问题描述】:我想用read.table()
在 R 中导入一个表(.txt
文件)。我表中的一列是一个包含九个数字的 ID - 一些 ID 以 0 开头,其他以 1 或 2 开头。
R 会截断第一个 0(012345678 变为 12345678),这会导致在使用此 ID 合并另一个表时出现问题。
谁能给我一个提示如何解决这个问题?
【问题讨论】:
【参考方案1】:正如 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
【讨论】:
酷我不知道 colClasses 奇怪如何设置as.is=T
对我不起作用。【参考方案2】:
这是一个基于条件向行添加前导零的 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])
【讨论】:
【参考方案3】:一个可重现的例子会很好,但是:使用read.table()
的colClasses
参数来指定您希望将此列读取为character
变量,而不是numeric
。或者在读入它们后将它们重新放入character
变量中,使用sprintf
用前导零填充数字。 (前者可能更容易。)
【讨论】:
以上是关于如何避免:read.table 截断以 0 开头的数值的主要内容,如果未能解决你的问题,请参考以下文章
Pandas groupby 聚合以截断最早日期而不是最旧日期