我想.txt
在 R 中导入一个表(文件)read.table()
。我表中的一列是一个包含九个数字的 ID - 一些 ID 以 0 开头,另一些以 1 或 2 开头。
R 会截断第一个 0(012345678 变为 12345678),这会导致在使用此 ID 合并另一个表时出现问题。
有人可以给我一个提示如何解决这个问题吗?
我想.txt
在 R 中导入一个表(文件)read.table()
。我表中的一列是一个包含九个数字的 ID - 一些 ID 以 0 开头,另一些以 1 或 2 开头。
R 会截断第一个 0(012345678 变为 12345678),这会导致在使用此 ID 合并另一个表时出现问题。
有人可以给我一个提示如何解决这个问题吗?
正如本的回答中所说,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
参数 toread.table()
指定您希望将此列作为character
变量读取,而不是numeric
. 或者character
在读入它们后将它们重新变为变量,使用sprintf
前导零填充数字。(前者可能更容易。)
这是一个 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])
}
}