我有一个数据集,我想在一组没有六个字符的日期前面填充零。例如,我的日期为91003
(2009年10月3日),我希望它读取091003
,以及前面缺少零的任何其他日期。当我使用sprintf函数时,代码是:
Data1$entrydate <- sprintf("%06d", data1$entrydate)
但它吐出的内容类似于000127
,或者问题中所有其他日期的其他随机数。我不明白发生了什么,我希望在这个问题上得到一些帮助。感谢。
PS。我有时也会收到sprintf
仅用于字符值的错误消息,我不知道是否有任何数值代码。
答案 0 :(得分:1)
我猜你得到的结果与预期不同,因为列类是factor
。您可以按numeric
或as.numeric(as.character(datacolumn))
将列转换为as.numeric(levels(datacolumn))
。根据{{1}}
将因子'f'转换为近似值 建议使用原始数值'as.numeric(levels(f))[f]' 并且比'as.numeric(as.character(f))'稍微高效。
所以,你可以使用
?factor
以下是显示问题的示例
levels(data1$entrydate) <- sprintf('%06d', as.numeric(levels(data1$entrydate)))
或者,它相当于
v1 <- factor(c(91003, 91104,90103))
sprintf('%06d', v1)
#[1] "000002" "000003" "000001"
将其转换回sprintf('%06d', as.numeric(v1)) #the formatted numbers are
# the numeric index of factor levels.
#[1] "000002" "000003" "000001"
时,按预期工作
numeric