【问题标题】:Replace characters from a column of a data frame R替换数据框R列中的字符
【发布时间】:2014-02-06 21:13:03
【问题描述】:

我有一个数据框

a <- runif (10)
b <- letters [1:10]
c <- c(rep ("A-B", 4), rep("A_C", 6))
data1 <- data.frame (a, b, c)
data1

并且我想将 c 列 A_C 中的 _ 替换为 - 以获得像 data2 这样的数据框:

z <- c(rep ("A-B", 4), rep("A-C", 6))
data2 <- data.frame (a, b, z)
data2

你知道我该怎么做吗?

【问题讨论】:

    标签: r replace dataframe


    【解决方案1】:

    使用gsub:

    data1$c <- gsub('_', '-', data1$c)
    data1
    
                a b   c
    1  0.34597094 a A-B
    2  0.92791908 b A-B
    3  0.30168772 c A-B
    4  0.46692738 d A-B
    5  0.86853784 e A-C
    6  0.11447618 f A-C
    7  0.36508645 g A-C
    8  0.09658292 h A-C
    9  0.71661842 i A-C
    10 0.20064575 j A-C
    

    【讨论】:

      【解决方案2】:

      如果您的变量data1$c 是一个因子,那么更改因子级别的标签比创建一个新的字符向量更有效:

      levels(data1$c) <- sub("_", "-", levels(data1$c))
      
      
                  a b   c
      1  0.73945260 a A-B
      2  0.75998815 b A-B
      3  0.19576725 c A-B
      4  0.85932140 d A-B
      5  0.80717115 e A-C
      6  0.09101492 f A-C
      7  0.10183586 g A-C
      8  0.97742424 h A-C
      9  0.21364521 i A-C
      10 0.02389782 j A-C
      

      【讨论】:

        【解决方案3】:

        您可以使用stringr library:

        library('stringr')
        
        a <- runif(10)
        b <- letters[1:10]
        c <- c(rep('A-B', 4), rep('A_B', 6))
        data <- data.frame(a, b, c)
        
        data
        
        #             a b   c
        # 1  0.19426707 a A-B
        # 2  0.12902673 b A-B
        # 3  0.78324955 c A-B
        # 4  0.06469028 d A-B
        # 5  0.34752264 e A_C
        # 6  0.55313288 f A_C
        # 7  0.31264280 g A_C
        # 8  0.33759921 h A_C
        # 9  0.72322599 i A_C
        # 10 0.25223075 j A_C
        
        data$c <- str_replace_all(data$c, '_', '-')
        
        data
        
        #             a b   c
        # 1  0.19426707 a A-B
        # 2  0.12902673 b A-B
        # 3  0.78324955 c A-B
        # 4  0.06469028 d A-B
        # 5  0.34752264 e A-C
        # 6  0.55313288 f A-C
        # 7  0.31264280 g A-C
        # 8  0.33759921 h A-C
        # 9  0.72322599 i A-C
        # 10 0.25223075 j A-C
        

        请注意,这确实会将因式变量转换为字符。

        【讨论】:

          【解决方案4】:

          chartr 对于这些类型的替换也很方便:

          chartr("_", "-", data1$c)
          #  [1] "A-B" "A-B" "A-B" "A-B" "A-C" "A-C" "A-C" "A-C" "A-C" "A-C"
          

          因此,您可以这样做:

          data1$c <- chartr("_", "-", data1$c)
          

          【讨论】:

          • 如果旧值不大于新值则完美。
          猜你喜欢
          • 2014-05-04
          • 1970-01-01
          • 2023-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-04
          • 2012-08-02
          相关资源
          最近更新 更多