【发布时间】:2019-11-25 19:40:57
【问题描述】:
我正在尝试修复部分循环函数
我创建了包含字符串和正则表达式的长列表(例如“ee”)。结构如下
ee
注意:我故意将正则表达式放在那里
我想取这个列表的每个元素,并在相当大的数据框中用“BB00”替换(小部分在下面,有用的列是“c”)
dput(df)
structure(list(a = c(1, 2, 3, 4, 6, 7, 8), b = c(2011, 2012, 2010, 1995, 1998, 2011, 2011), c = c("enemy ID9", "John potassium", "chloride misch", "malchloride", "retardfalling", "friendretard", "use to beID10")), row.names = c(NA, -7L), class = "data.frame")
所以我尝试创建一个函数,它接受一个列表,并通过将每个元素传递给 dplyr 的 mutate() 中的 gsub() 来循环,如下所示
library(tibble)
library(dplyr) library(tidytext) library(tidyr)
strpDetach<- function(x){
for(j in x){
df1=df %>% mutate(c = gsub(j, "BB00", c,ignore.case=TRUE))
return(df1) }
}
df2=strpDetach(ee)
dput(df2)
structure(list(a = c(1, 2, 3, 4, 6, 7, 8), b = c(2011, 2012, 2010, 1995, 1998, 2011, 2011), c = c("enemy ID9", "John potassium", "chloride misch", "malchloride", "retardfalling", "friendBB00", "use to beID10")), row.names = c(NA, -7L), class = "data.frame")
显然,只有列表中的第一个元素有效
用另一种方式修改函数(直接取列表的每个元素)如下:
strpDetach<- function(j){df %>% mutate(c = gsub(j, "BB00", c,ignore.case=TRUE))}
for( j in ee){
for (i in 1:ncol(df)) {
c=df[,3]
df1=strpDetach(j)
}
}
dput(df1)
structure(list(a = c(1, 2, 3, 4, 6, 7, 8), b = c(2011, 2012, 2010, 1995, 1998, 2011, 2011), c = c("enemy ID9", "John potassium", "chloride misch", "malBB000", "retardfalling", "friendretard", "use to beID10")), row.names = c(NA, -7L), class = "data.frame")
只有列表中的最后一个元素有效
我的问题是我在循环中哪里做错了?
非常感谢您阅读我的长文!!
预期的输出是:
dput(df1)
structure(list(a = c(1, 2, 3, 4, 6, 7, 8), b = c(2011, 2012, 2010, 1995, 1998, 2011, 2011), c = c("enemy BB000", "JohnBB000", "chloride misch", "malBB000", "retardfalling", "friendBB000", "use to beBB000")), row.names = c(NA, -7L), class = "data.frame")
【问题讨论】:
-
谢谢@akrun 我已经添加了
-
我在下面发布了一个解决方案