这是我的第一个问题。
我有一个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))
谢谢您的帮助!
不是使用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('%'))) }