替换 R 中包含子字符串的数据帧的所有值

tre*_*v84 3 r lapply grepl

我试图将其中包含“coin”一词的数据帧的所有值替换为 0,示例数据帧如下所示:

P1 P2 P3 P4
0 3 枚硬币 2 1
2 4 -2 枚金币 4

我的第一次尝试是使用一个函数来 lapply(dataframe,function),该函数有条件地检查该值是否包含字符串“coin”,然后返回 0。

我确信有更有效的方法可以做到这一点,但这是我作为 R 初学者能想到的最好方法。

我正在努力使用 grepl() 函数,如果字符串包含我正在查找的子字符串,该函数应该会返回 TRUE。但是,我很难弄清楚为什么以下代码返回 FALSE。

y = "-3 coins"
grepl(y,"coin",fixed=TRUE)
Run Code Online (Sandbox Code Playgroud)

我的问题是:当“coin”位于初始字符串中时,这个 grepl 返回 FALSE 我做错了什么,有没有更好的方法来实现我的最终目标,即用 0 替换所有包含“coin”的单元格?

非常感谢任何帮助,谢谢!

ste*_*fan 5

使用lapply你可以达到你想要的结果,如下所示:

df <- data.frame(
  P1 = c(0L, 2L),
  P2 = c("3 Coins", "4"),
  P3 = c("2", "-2 Coins"),
  P4 = c(1L, 4L)
)

df[] <- lapply(df, function(x) {x[grepl("coin", tolower(x), fixed = TRUE)] <- 0; x})

df
#>   P1 P2 P3 P4
#> 1  0  0  2  1
#> 2  2  4  0  4
Run Code Online (Sandbox Code Playgroud)