gsub在循环中实现时不工作

时间:2017-12-06 12:32:13

标签: r gsub

这里我在R中有以下数据帧df

kyid    industry    amount
112     Apparel     345436
234     APPEARELS   234567
213     apparels    345678
345     Airlines    235678
123     IT          456789
124     IT          897685

我希望在行业中替换错误地将ApparelAPPEARLS写入Apparels

我尝试使用创建列表并通过循环运行它。

l<-c('Apparel ','APPEARELS','apparels')

for(i in range(1:3)){
    df$industry<-gsub(pattern=l[i],"Apparels",df$industry)
}

它不起作用。只有一个元素发生变化。

但是,当我单独使用该语句时,它不会产生错误及其工作。

df$industry<-gsub(pattern=","Apparels",df$industry)

但这是一个大型数据集,所以我在R请求帮助。

2 个答案:

答案 0 :(得分:2)

sub没有循环使用|

l <- c("Apparel" , "APPEARELS", "apparels")
# Using OPs data
sub(paste(l, collapse = "|"), "Apparels", df$industry)
# [1] "Apparels" "Apparels" "Apparels" "Airlines" "IT" "IT"   

我使用sub代替gsub,因为字符串中只出现一次模式(至少在示例中)。

答案 1 :(得分:1)

虽然range在Python中返回一个序列,但它返回R中向量的最小值和最大值:

range(1:3)
# [1] 1 3

相反,您可以使用1:3seq(1,3)seq_along(l),这些都会返回

# [1] 1 2 3

另请注意'Apparel''Apparel '之间的区别。

所以

df<-read.table(header=T, text="kyid    industry    amount
112     Apparel     345436
234     APPEARELS   234567
213     apparels    345678
345     Airlines    235678
123     IT          456789
124     IT          897685")
l<-c('Apparel','APPEARELS','apparels')
for(i in seq_along(l)){
  df$industry<-gsub(pattern=l[i],"Apparels",df$industry)
}
df
# kyid industry amount
# 1  112 Apparels 345436
# 2  234 Apparels 234567
# 3  213 Apparels 345678
# 4  345 Airlines 235678
# 5  123       IT 456789
# 6  124       IT 897685