在 R 中一次替换多列中的值的最简单方法

Easiest way to replace values in multiple columns at once in R

我正在尝试用 NA 替换数据框中的“*”。我尝试使用 gsub 函数如下:

df = data.frame(x = c('*',2,3), y = c(3,3,5))

df[,1:2] = apply(df[,1:2], 2, function(x) gsub('*',NA,x))

虽然我的数据框中只有一个 * 但 gsub 将所有数据替换为 NAs!看起来 gsub 对 * 有问题。我认为这是在我的数据框中用 NA 替换 * 的最简单方法,但它失败了。谁有更好的主意?

使用fixed = TRUE:

df[,1:2] = apply(df[,1:2], 2, function(x) gsub('*',NA,x,fixed = TRUE))

* 用作 regular expression 否则。

而且可以跳过apply函数直接找*:


df <- data.frame(x = c('*',2,3), y = c(3,3,5))
df
#>   x y
#> 1 * 3
#> 2 2 3
#> 3 3 5

df[df[,]=="*"] <- NA
df
#>      x y
#> 1 <NA> 3
#> 2    2 3
#> 3    3 5

reprex package (v0.3.0)

创建于 2021-01-06

并且 df[ , ] 是不必要的,所以 df[df=="*"] <- NA 就足够了。