R 替换不包含';不符合标准

R 替换不包含';不符合标准,r,replace,gsub,grepl,R,Replace,Gsub,Grepl,我有一个数据框: 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 vaca

我有一个数据框:

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

我们可以使用
grepl
和否定:

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

df$Bldg[!grepl(\\bBldg\\b“,df$Bldg)]到目前为止,您尝试了什么?您是否正在寻找类似的东西:
df[!grepl(“Bldg”,df$Bldg),“Bldg”]您还可以将
stringr::stru_detect
ifelse
df
      Bldg
1  Bldg 5A
2     <NA>
3 Bldg 10B
4     <NA>
df <- data.frame(
  Bldg = c("Bldg 5A", NA, "Bldg 10B", "Someothertext")
)