替换R中向量中的数字

时间:2015-02-21 21:04:24

标签: r vector replace

我是R的新人,如果你能帮助我,我真的很感激。我想创建一个允许我更改向量内容的函数。我的想法是:我引入任何向量,然后如果一个向量的数量有1个字符,则该数字将转换为具有3个字符的数字,在数字前面添加“00”;如果数字有2个字符,则该函数将添加“0”,如果数字有3个字符,则该数字将相同。   强文 我有这个功能;当矢量从1开始时它起作用;但如果它以不同的数字开头,则会出现问题。 如果我的英语不太好,请原谅我,谢谢。

a <- 1:10
f5 <- function(a){
    for(i in a){
        if (nchar(a[i])==1){
            a[i] <- paste("00",a[i],sep ="")
        }

        if (nchar(a[i])==2){
            a[i] <- paste("0",a[i],sep ="")
                }

    if (nchar(a[i])==3){
        a[i] <- paste(a[i],sep ="")

    }
    }
a
}

1 个答案:

答案 0 :(得分:3)

使用可添加前导零的sprintf功能:

# test vector
v <- 1:10
> cat(sprintf("%03d", v))
001 002 003 004 005 006 007 008 009 010

只需更改&#34; d&#34;前面的数字。更改前导零的数量。

# More examples:
v2 <- c(1, 50, 999)
> cat(sprintf("%03d", v2))
001 050 999

您实际上也可以更改元素,而不仅仅是打印它们:

v2 <- c(1, 50, 999)
v3 <- sprintf("%03d", v2)
> v3
[1] "001" "050" "999"

> class(v3)
[1] "character"

将此方法与naltipar的方法进行比较:

> all.equal(sapply(v2, add.zeros), v3)
[1] TRUE

他们相同