许多列中的 str_replace 出现问题

Ive*_*eda 3 replace for-loop r str-replace dataframe

我是 R 菜鸟。

\n\n

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

\n\n

我正在使用这段代码,它可以单独工作:

\n\n
datos$max52sem<-str_replace(datos$max52sem,"-","0.00")\ndatos$min52sem<-str_replace(datos$min52sem,"-","0.00")\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试使用“for”从所有列中更改它,而不是将所有变量名称写入 15 次。

\n\n

这就是我正在写的:

\n\n
mis_vars<-c("max52sem","min52sem","cierre_prev","cierre_hoy","max_hoy","min_hoy","ret_hoy","ret_sem","ret_mes","ret_a\xc3\xb1o","ret_ytd","vol","upa","vla","pvla","pu")\nfor(x in mis_vars)\n  datos$x<-str_replace(datos$x,"-","0")\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n

$<-.data.frame( *tmp*, "x", value = character(0))中的错误:\n 替换有 0 行,数据有 1220>

\n
\n

akr*_*run 8

有了dplyr,我们可以使用mutate_at

library(dplyr)
library(stringr)
datos <- datos %>%
             mutate_at(vars(mis_vars), ~ str_replace(., "-", "0"))
Run Code Online (Sandbox Code Playgroud)

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


或者仅使用base R

datos[mis_vars] <- lapply(datos[mis_vars], sub, pattern = "-", replacement = "0")
Run Code Online (Sandbox Code Playgroud)