这里我在R中有以下数据帧df
。
kyid industry amount
112 Apparel 345436
234 APPEARELS 234567
213 apparels 345678
345 Airlines 235678
123 IT 456789
124 IT 897685
我希望在行业中替换错误地将Apparel
或APPEARLS
写入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请求帮助。
答案 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:3
或seq(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