我有一个从三位到五位的整数列。我想输出一个包含六个字符(czCode
)的列,其中包含适当数量的前导零,具体取决于输入整数。
a <- seq(100, 50000, 1)
df1 <- data.frame(a)
View(df1)
myZero <- '0'
dblZero <- '00'
triZero <- '000'
a <- mutate(a, czCode = as.character(a))
df1$a <- ifelse(df1$a < 1000, paste(triZero, df1$czCode, sep = ""),
ifelse(df1$a >= 1000 & df1$a < 10000, paste(dblZero, df1$czCode, sep = ""),
ifelse(df1$a >= 10000, paste(myZero, df1$a, sep = "")),
))
因此100将输出为“000100”
和1000将输出为“001000”
和10000将输出为“010000”
但我一直收到以下错误:
ifelse出错(df1 $ a&gt; = 1000&amp; df1 $ a&lt; 10000,粘贴(dblZero,df1 $ czCode,:
) unused argument()
答案 0 :(得分:1)
在suchait explained the reason for the encountered error message期间,有一种更好的方法可以将数字转换为带前导零的字符:
sprintf("%06i", 10^(2:4))
[1] "000100" "001000" "010000"
转换规范%06i
告诉sprintf()
使用6个字符的字段宽度转换整数和“整数”值,并使用前导零填充到字段宽度。
顺便说一句,paste0(x, y)
是paste(x, y, sep = "")
的捷径。
答案 1 :(得分:0)
我认为你错过了最后一个if-else的最后一个论点。我试过这样的东西,它对我有用: -
df1$a <- ifelse(df1$a < 1000, paste(triZero, df1$czCode, sep = ""),
ifelse(df1$a >= 1000 & df1$a < 10000, paste(dblZero, df1$czCode, sep = ""),
ifelse(df1$a >= 10000, paste(myZero, df1$a, sep = ""), F)
))