【问题标题】:How to change code T-25-4 into T-25-04 in a dataframe in R?如何在 R 的数据框中将代码 T-25-4 更改为 T-25-04?
【发布时间】:2018-01-21 11:46:42
【问题描述】:

我在 R 中有一个 data.frame。第一列包含像 T-25-4 这样的代码。我想把它改成 T-25-04 等等。所以最后一个数字应该是2位数

例子:

T-25-1
T-25-2
T-25-3
T-25-4
T-25-5
T-25-6
T-25-7
T-25-8
T-25-9

【问题讨论】:

    标签: r string dataframe converter


    【解决方案1】:

    我们可以使用tidyversestringr 中的函数。 df2 是最终输出。

    library(tidyverse)
    library(stringr)
    
    # Create example data frame
    dt <- data_frame(Col = c("T-25-1", "T-25-2", "T-25-3", "T-25-4", "T-25-5",
                             "T-25-6", "T-25-7", "T-25-8", "T-25-9"))
    
    # Process the data
    dt2 <- dt %>%
      # Separate the original column to three columns
      separate(Col, into = c("Col1", "Col2", "Col3")) %>%
      # Pad zero to Col3 until the width is 2
      mutate(Col3 = str_pad(Col3, width = 2, side= "left", pad = "0")) %>%
      # Combine all three columns separated by "-
      unite(Col, Col1:Col3, sep = "-")
    
    # View the reuslts
    dt2
    # A tibble: 9 x 1
          Col
    *   <chr>
    1 T-25-01
    2 T-25-02
    3 T-25-03
    4 T-25-04
    5 T-25-05
    6 T-25-06
    7 T-25-07
    8 T-25-08
    9 T-25-09
    

    【讨论】:

      【解决方案2】:

      借用 ycw 答案的第一部分,但使用 mutategsub 更简单:

      library(tidyverse)
      dt <- data_frame(Col = c("T-25-1", "T-25-2", "T-25-3", "T-25-4", "T-25-5",
                           "T-25-6", "T-25-7", "T-25-8", "T-25-9"))
      
      dt %>%
        mutate(Col = gsub("(\\d)$", paste0("0", "\\1"), Col))
      

      如果最后一位数字大于 9 并且您不想添加 0:

      dt %>%
        mutate(Col = ifelse(nchar(sub(".*-(\\d+)$", "\\1", Col)) < 2, # Check if last number is less than 10
                            sub("(\\d+)$", paste0("0", "\\1"), Col), # Add 0 in front if less than 10
                            Col))
      

      【讨论】:

      • gsub 和正则表达式的好解决方案,但是如果有任何带有两位数字的行,例如T-25-11,此解决方案将导致T-25-101。输出可能不是 OP 想要的。
      • 是的,添加了一个条件,但不是很好看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2017-06-03
      相关资源
      最近更新 更多