许多列中的 str_replace 问题以及

Problem with str_replace in many columns and for

我是 R 的小白。

我正在处理大约 150 行和 21 列的数据框。我想将第 5 列到第 20 列的字符“-”更改为“0.00”。

我正在使用此代码,它可以单独使用:

datos$max52sem<-str_replace(datos$max52sem,"-","0.00")
datos$min52sem<-str_replace(datos$min52sem,"-","0.00")

我正在尝试使用 "for" 从所有列中更改它,而不是将所有变量的名称写 15 次。

这就是我正在写的内容:

mis_vars<-c("max52sem","min52sem","cierre_prev","cierre_hoy","max_hoy","min_hoy","ret_hoy","ret_sem","ret_mes","ret_año","ret_ytd","vol","upa","vla","pvla","pu")
for(x in mis_vars)
  datos$x<-str_replace(datos$x,"-","0")

"mis_vars" 是我想在我的数据框中更改的列(变量)的名称,但我从 R 得到了这个答案,我不知道我做错了什么。

Error in $<-.data.frame(*tmp*, "x", value = character(0)) : replacement has 0 rows, data has 1220>

有了dplyr,我们可以用mutate_at

library(dplyr)
library(stringr)
datos <- datos %>%
             mutate_at(vars(mis_vars), ~ str_replace(., "-", "0"))

在 OP 的 for 循环中,它应该是 datos[[x]] <- 而不是 datos$x <-,因为它将创建一个名为 'x' 的列而不是 'mis_vars' 中的变量


或仅使用 base R

datos[mis_vars] <- lapply(datos[mis_vars], sub, pattern = "-", replacement = "0")

在 base R 中,我们可以使用 lapply 来更改多个列

datos[mis_vars]  <- lapply(datos[mis_vars], function(x) sub("-", "0.00", x))