使用gsub循环以通过存储在向量中的不同列替换字符

问题描述 投票:0回答:1

这是我的第一个问题。

我有一个df(us_census)。在某些列中,我想删除百分比符号(%)。列在向量竞赛中定义为字符串。知道如何使用mutate和gsub循环吗?下面的代码不起作用。

races <- c('Hispanic', 'White', 'Black', 'Native', 'Asian', 'Pacific')
for (item in races){
  us_census <- mutate(us_census, get(item)=gsub('\\%','',get(item)))
}

我想避免使用apply()。使用循环是否必须?可能会使用不同的东西?我想避免下面写的冗长而传统的方式

us_census <- us_census %>%
  mutate(Hispanic=gsub('\\%','',Hispanic),
         White=gsub('\\%','',White), Black=gsub('\\%','',Black), Native=gsub('\\%','',Native), Asian=gsub('\\%','',Asian), Pacific=gsub('\\%','',Pacific))

谢谢您的帮助!

r loops gsub
1个回答
0
投票

不是使用for循环,而是tidyverse方法是在mutate_at中指定“种族”>

library(dplyr)
library(stringr)
us_census %>%
     mutate_at(vars(races), ~ str_remove(., fixed('%')))

关于OP的代码,我们可以使用get代替:=。由于item是字符串,因此我们可以在!!的lhs上用:=求值,同时通过将字符串转换为sym bol并求值(!!)来提取列的值。为了更快地执行此操作,最好指定fixed = TRUE以及以下事实:如果只有%的单个实例,请使用sub而不是gsub(用于全局替换)

library(dplyr)
for (item in races){
    us_census <- us_census %>%
                    mutate(!! item :=sub('%','', !! rlang::sym(item), fixed = TRUE))
  }

另外,另一个选项是str_replace中的stringr

library(stringr)
for (item in races){
    us_census <- us_census %>%
                    mutate(!! item :=str_remove(!! rlang::sym(item), fixed('%')))
  }

© www.soinside.com 2019 - 2024. All rights reserved.