【问题标题】:R - Replace multiple values in data.frame with one valueR - 用一个值替换 data.frame 中的多个值
【发布时间】:2018-03-13 14:39:47
【问题描述】:

我正在使用 R 并想用一个值替换 data.frame 中以某些字母开头的多个值。

例如,下面是我的数据框中的示例值,例如 XYZ1、XYZ2、XYZ3、XYZ4.. 等,然后我想将所有以“XYZ”开头的值替换为“ABC”

例子

df 是数据框

 V1    V2   V3   V4 

XYZ1  XYZ2 XYZ4 XYZ10

XYZ3  RST1 WST3 XYZ11

这里 (V1-V4) 是我想要替换所有以“XYZ”开头的值更改为“ABC”的列。

我想要的结果是

df

V1   V2   V3   V4 

ABC  ABC  ABC  ABC

ABC  RST1  WST3  ABC

在将每列中的每个值转换为字符值之后,我可以通过对每个值使用 == 运算符来做到这一点,但是如何一次将所有值转换为多列?

【问题讨论】:

  • 看看sub(...)

标签: r


【解决方案1】:
library(dplyr)

df %>%
  mutate_all(funs(gsub("XYZ.*","ABC",.)))
  #mutate_at(vars(V1:V4), funs(gsub("XYZ.*","ABC",.)))
  

输出为:

   V1   V2   V3  V4
1 ABC  ABC  ABC ABC
2 ABC RST1 WST3 ABC

样本数据:

df <- structure(list(V1 = c("XYZ1", "XYZ3"), V2 = c("XYZ2", "RST1"), 
    V3 = c("XYZ4", "WST3"), V4 = c("XYZ10", "XYZ11")), .Names = c("V1", 
"V2", "V3", "V4"), class = "data.frame", row.names = c(NA, -2L
))

【讨论】:

    【解决方案2】:

    或者使用 gsub

     a <- c("xyz1","xyz9")
        gsub("xyz",x=a,replacement="ABC",ignore.case = FALSE)
    

    【讨论】:

    • 我有很多值要替换,所以写下所有值会很乏味,我们可以做点什么,以便我们可以选择应该替换值的列范围。
    • @AbhinavSharma gsub() 用于捕获任何特定模式,在这种情况下,任何包含"XYZ" 的值,并将其替换为replacement="ABC。向量 a 只是我提供的一个示例,用于向您展示如何使用 gsub。您当然可以在循环中使用此函数或使用 dplyr 的 mutate,如 @Prem 所示。
    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多