r - 许多列中的 str_replace 问题以及

标签 r dataframe for-loop replace str-replace

我是 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")

关于r - 许多列中的 str_replace 问题以及,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58895859/

相关文章:

r - 在 Windows 上编写 R 包构建二进制文件

python - pretty-print 整个 Pandas Series/DataFrame

c++ - for 语句后的大括号

python - 在第一个元素之后跳过所有其他元素

r - 对数据框的每 3 列求和以形成新列

r - 是否可以在 R 中编码音乐并播放? (Mac OS X)

r - 字典样式替换多个项目

scala - Spark Scala 将数据帧拆分为相同数量的行

php - 循环列表始终使用复选框插入列表中的第一个

r - 预订啦!未定义的控制序列。 <最近阅读>\passthrough