我试图将其中包含“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”的单元格?
非常感谢任何帮助,谢谢!
使用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)