考虑以下简化数据框:
df<-data.frame(x1=c("A","B","C"),x2=c("K to B","K to B","K to B"))
我想在 x2 中找不到 x1 字符的行中将 x2 中的字符串替换为 NA(或“”)。即数据框应修正为:
df_corrected<-data.frame(x1=c("A","B","C"),x2=c("NA","K to B","NA"))
实际数据集包含 95000 行和 x2 中的许多不同表达式。我还使用 Tidyverse 来清理数据。我曾尝试使用 grepl() 来搜索 x2 字符串中的 x1 值,但是我在为每一行迭代执行此操作时遇到问题(需要函数/前向循环?)并将其与 mutate() 组合。如果更好的话,我也愿意接受其他选择(例如 sapply 和 base R?或 sqldf?)
提前非常感谢!
您可以使用
grepl
来检查 x2 是否包含 x1 rowwise
的字符串,如下所示:
library(dplyr)
df %>%
rowwise() %>%
mutate(x2 = case_when(grepl(x1, x2) ~ x2,
TRUE ~ "NA"))
#> # A tibble: 3 × 2
#> # Rowwise:
#> x1 x2
#> <chr> <chr>
#> 1 A NA
#> 2 B K to B
#> 3 C NA
创建于 2023-08-30,使用 reprex v2.0.2