首页 > 解决方案 > 用R中的data.frame中的给定替换字符替换数字

问题描述

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

我想知道如何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")

标签: rregexstringdataframevector

解决方案


我们可以使用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"

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

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')

推荐阅读