嵌套条件抛出错误

时间:2017-12-07 16:46:16

标签: r nested

我有一个从三位到五位的整数列。我想输出一个包含六个字符(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()

2 个答案:

答案 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)
              ))