【问题标题】:Insert text in the middle of column names in R在R中的列名中间插入文本
【发布时间】:2016-06-11 10:56:41
【问题描述】:

我想在data.framecolnames 中的. 之后插入一个字符串"_2010_"

data("iris")

> names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"  

所需的输出

[1] "Sepal._2010_Length" "Sepal._2010_Width"  "Petal._2010_Length" "Petal._2010_Width"  "Species"  

帮助?

编辑: 相关问题:现在如何插入字符串"_2010_" before .

[1] "Sepal_2010_.Length" "Sepal_2010_.Width"  "Petal_2010_.Length" "Petal_2010_.Width"  "Species"  

【问题讨论】:

    标签: r string text gsub


    【解决方案1】:

    我们可以使用sub 和'iris' 的names,它有一个.(通过grep 子集)。在这里,我们使用捕获组 ((...)) 并替换为反向引用 (\\1) 以及新添加的子字符串 (_2010_)。

    i1 <- grep("[.]", names(iris))
    name(iris)[i1] <- sub("([^.]+.)(.*)", "\\1_2010_\\2", names(iris)[i1])
    

    或者使用单个捕获组,我们匹配一个点 (.\\),后跟字符,直到捕获组中字符串的末尾。用一个点替换它,后跟子字符串和反向引用。

    sub("\\.(.*)", "._2010_\\1", names(iris))
    #[1] "Sepal._2010_Length" "Sepal._2010_Width"  "Petal._2010_Length"
    #[4] "Petal._2010_Width"  "Species"      
    

    如果我们需要.之前的字符串,只需更改替换中字符串的放置顺序

    sub("\\.(.*)", "_2010_.\\1", names(iris))
    #[1] "Sepal_2010_.Length" "Sepal_2010_.Width"  "Petal_2010_.Length"
    #[4] "Petal_2010_.Width"  "Species"  
    

    【讨论】:

    • 感谢@akrun,这真的很有帮助。如果我想在 before . 之前包含字符串,答案将如何变化?
    【解决方案2】:

    另一种方法是使用strsplitpaste

    sapply(strsplit(names(iris), "\\."), paste, collapse = "_2010_")
    [1] "Sepal_2010_Length" "Sepal_2010_Width"  "Petal_2010_Length" "Petal_2010_Width"  "Species" 
    

    你也可以在任何你喜欢的地方加一个点:

    sapply(strsplit(names(iris), "\\."), paste, collapse = "._2010_")
    [1] "Sepal._2010_Length" "Sepal._2010_Width"  "Petal._2010_Length" "Petal._2010_Width"  "Species"
    
    sapply(strsplit(names(iris), "\\."), paste, collapse = "_2010_.")
    [1] "Sepal_2010_.Length" "Sepal_2010_.Width"  "Petal_2010_.Length" "Petal_2010_.Width"  "Species"
    

    【讨论】:

    • 这真的很有帮助,特别是因为strsplit 的语法看起来比sub 更直观一点
    【解决方案3】:

    stringr 包中的函数str_replace 非常适合这个问题,并且非常易于使用。

    library(stringr)
    str_replace(names(iris), "\\.", "_2010_.")
    #[1] "Sepal_2010_.Length" "Sepal_2010_.Width"  "Petal_2010_.Length" 
    #[4] "Petal_2010_.Width"  "Species"
    

    如果您想在第一个 _ 之前使用 .,只需在 str_replace 的语法中输入 "._2010_"。我们使用\\. 而不仅仅是.,因为点已经有意义,如果我们想专门匹配它,我们需要转义它(http://regexone.com/lesson/wildcards_dot)。

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2022-07-02
      • 2020-12-27
      • 2022-12-18
      • 2014-03-22
      • 2020-08-23
      相关资源
      最近更新 更多