【问题标题】:Replace Vector Data in a Data Frame that doesn't match criteria替换不符合条件的数据框中的矢量数据
【发布时间】:2021-04-06 14:24:31
【问题描述】:

我有一个数据框:

Bldg    Bldg-Room   Expt. #
Bldg 5A NA  NA
NA  5A-141  vacant
Reynolds    5A-142  S00168
NA  NA  S00168
NA  NA  S00168
NA  NA  S00756
Reynolds    5A-143  S00168
NA  NA  S00756
NA  NA  S00168
NA  NA  S00168
NA  5A-144  vacant
NA  5A-145  vacant
Reynolds    5A-146  7590.21
NA  5A-147  vacant
Reynolds    5A-148  7712.01
NA  NA  7712.01
NA  NA  7712.01
Lewis   5A-149  occupied
Lewis   5A-150  occupied

在 df$Bldg(第 1 列)中,我想用 NA 替换任何不包含“Bldg*”的文本字符串

我尝试过 grep、grepl 和 gsub,但不确定我输入的参数是否正确。

期望的输出是:

Bldg    Bldg-Room   Expt. #
Bldg 5A NA  NA
NA  5A-141  vacant
NA  5A-142  S00168
NA  NA  S00168
NA  NA  S00168
NA  NA  S00756
NA  5A-143  S00168
NA  NA  S00756
NA  NA  S00168
NA  NA  S00168
NA  5A-144  vacant
NA  5A-145  vacant
NA  5A-146  7590.21
NA  5A-147  vacant
NA  5A-148  7712.01
NA  NA  7712.01
NA  NA  7712.01
NA  5A-149  occupied
NA  5A-150  occupied

【问题讨论】:

  • 到目前为止你尝试过什么?你在寻找类似的东西:df[!grepl("Bldg", df$Bldg), "Bldg"] <- NA
  • 您也可以将stringr::str_detectifelse结合使用

标签: r replace gsub grepl


【解决方案1】:

我们可以用grepl 和否定来做到这一点:

df$Bldg[!grepl("\\bBldg\\b", df$Bldg)] <- NA

结果:

df
      Bldg
1  Bldg 5A
2     <NA>
3 Bldg 10B
4     <NA>

数据:

df <- data.frame(
  Bldg = c("Bldg 5A", NA, "Bldg 10B", "Someothertext")
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2021-10-13
    • 2015-09-14
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多