【问题标题】:replace numeric with a given replacement character in a data.frame in R用R中的data.frame中的给定替换字符替换数字
【发布时间】:2020-09-08 15:39:38
【问题描述】:

我有各种类型的 data.frames,每一种都可以在其中包含一个长数字somewhereAB 是两个真实的例子。

我想知道如何将ct 列中的任何数字元素替换为给定的replacement.name

请查看可重现的 R 代码,期望的输出如下。

A <- data.frame(ct = c("C,0.839662447257384 - T,0.839662447257384", "No,C,0.44462447257384 - Yes,T,0444462447257384"))

B <- data.frame(ct = "0.822125181950509,C,Female - 0.822125181950509,T,Female")

replacement.name = "year"  # Put this in place of any numeric value in column `ct`


A.desired <- data.frame(ct = c("C,year - T,year", "No,C,year - Yes,T,year"))

B.desired <- data.frame(ct = "year,C,Female - year,T,Female")

【问题讨论】:

    标签: r regex string dataframe vector


    【解决方案1】:

    我们可以使用gsub. 一起删除数字并替换为“年份”

    A$ct <- gsub("[0-9.]+", "year", A$ct)
    A$ct
    #[1] "C,year - T,year"        "No,C,year - Yes,T,year"
    
    B$ct <- gsub("[0-9.]+", "year", B$ct)
    B$ct
    #[1] "year,C,Female - year,T,Female"
    

    上面的解决方案有一个bug,即如果其他地方有.,它可以替换它。为了避免这种情况

    gsub("[0-9]+\\.[0-9]+", "year", B$ct)
    

    如果这些是在多个数据集上完成的,我们可以创建一个函数

    f1 <- function(dat, colnm, replstr){
          dat[[colnm]] <- gsub("[0-9]+\\.[0-9]+", replstr, dat[[colnm]])
          dat
         }
    
    f1(A, 'ct', 'year')
    

    【讨论】:

    • @rnorouzian 不,不需要。 $ 用于指定字符串末尾的位置。由于位置不固定,所以不需要
    • @rnorouzian 抱歉,忘记了那部分。你可以分配。更新
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2016-03-26
    相关资源
    最近更新 更多