【问题标题】:replace decimal point from strings in entire column从整列中的字符串替换小数点
【发布时间】:2014-03-17 14:11:43
【问题描述】:

我正在处理一个数据集,其列的数字如下:

icd9code
285.21
593.9
285.21
v04.81

为了运行 R comorbidities 包,我需要将它们更改为不带小数点的 5 位数字。

所以他们需要看起来像这样:

icd9code
28521
59390
28521
v0481

我可以使用什么功能?特别是,如果它只有 4 位数字,我怎样才能让它在数字的末尾显示 0。另外,如何转移以'v'开头的号码?

【问题讨论】:

    标签: r formatting decimal transformation digits


    【解决方案1】:

    这是另一种解决方法,以防有多个列需要替换。 我确信有更好的方法可以做到这一点,但逻辑很清楚: 1)拆分每列的字符串 2) 检查小数点后的字符数并相应替换

    char <- data.frame(icd9code1 = c("285.21", "593.9", "285.21" ,"v04.81"),
                       icd9code2 = c("285.21", "593.9", "285.21" ,"v04.81"),
                       icd9code3 = c("285.21", "593.9", "285.21" ,"v04.81")
                       )
    
    for(col in 1:dim(char)[2]){
      split_str <- strsplit(char[,col],"\\.")
    
      for(i in 1:nrow(char)){
        if(nchar(split_str[[i]][2]) == 1){
          char[,col][i] <- paste0(gsub("\\.", "", char[,col][i]),"0")
        } else {
          char[,col][i] <- paste0(gsub("\\.", "", char[,col][i]))
        }
      }
    }
    
    # > char
    #   icd9code1 icd9code2 icd9code3
    # 1     28521     28521     28521
    # 2     59390     59390     59390
    # 3     28521     28521     28521
    # 4     v0481     v0481     v0481
    

    【讨论】:

      【解决方案2】:

      它不是那么漂亮,但它应该适用于所有系统:

      x <- scan(text="285.21 593.9 285.21 v04.81", what="character")
      #[1] "285.21" "593.9"  "285.21" "v04.81"
      
      res <- gsub("\\.","",x)
      mapply(paste0, res, sapply(5-nchar(res),rep,x="0"))
      
      #  28521    5939   28521   v0481 
      #"28521" "59390" "28521" "v0481" 
      

      【讨论】:

        【解决方案3】:

        这是一个矢量化的解决方案:

        x <- c("285.21", "593.9", "285.21", "v04.81")
        
        substr(gsub("\\.", "", paste0(x, "00000")), 1, 5)
        # [1] "28521" "59390" "28521" "v0481"
        

        【讨论】:

          猜你喜欢
          • 2021-06-17
          • 1970-01-01
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          • 2017-11-06
          • 2021-05-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多