标准化R中data.frame的数字字符串中的字符数

时间:2014-05-12 03:06:55

标签: r

我有一个数据框

     a c
1   98 1
2   99 2
3  100 3
4  101 4
5  102 5
6  103 6
7  999 7
8 1003 8

我希望将a列转换为b列,如下所示

     a c    b
1   98 1 0098
2   99 2 0099
3  100 3 0100
4  101 4 0101
5  102 5 0102
6  103 6 0103
7  999 7 0999
8 1003 8 1003

我目前使用的代码是

a <- c(98:103,999,1003)
c <- 1:8
b <- a

data <- data.frame(a,c,b)
for (i in 1:dim(data)[1]){
    if (data[i,1]/100 <1) {
        data[i,3] <- paste("00",data[i,1],sep="")
    } else if (data[i,1]/1000 < 1){
        data[i,3] <- paste(0,data[i,1],sep="")
    } else{
        data[i,3] <- data[i,1]
    }
}

但是我发现这个代码执行速度非常慢,因为我的实际数据超过60,000个实例。

如何优化代码以完成任务?

1 个答案:

答案 0 :(得分:0)

在@joran和@thelatemail的帮助下。 我用下面的代码解决了这个问题:

    a <- c(98:103,999,1003)
    c <- 1:8
    data <- data.frame(a,c)
    data$b <- sprintf("%04d",data$a)