我想在数据框中多次用单个字母/单词替换多个字母/单词。举个例子,
一些数据:
df = data.frame(
a = 1:8,
b = c("colour1 o", "colour2 O", "colour3 out", "colour4 Out",
"soundi i", "soundr I", "sounde in", "soundw In"))
df
a b
1 1 colour1 o
2 2 colour2 O
3 3 colour3 out
4 4 colour4 Out
5 5 soundi i
6 6 soundr I
7 7 sounde in
8 8 soundw In
这是我要替换的内容:
df_repl <- list(
O = c("o", "out", "Out"),
In = c("i", "in", "I"))
所以 in df$b o, outandOut应该变成Oand i, inand Ibecome In,但前提是它们与任何其他单词之间用空格隔开,所以oincolour不是大写的。
这让我走到了一半,但我认为我需要另一个嵌套的 for 循环才能通过df_repl......
for (word in df_repl[[1]]){
patt <- paste0('\\b', word, '\\b')
repl <- paste(names(df_repl[1]))
df$b <- gsub(patt, repl, df$b)
}
df
a b
1 1 colour1 O
2 2 colour2 O
3 3 colour3 O
4 4 colour4 O
5 5 soundi i
6 6 soundr I
7 7 sounde in
8 8 soundw In
上面o,变成but ,out并且没有改变,这里是所需的输出:OutOiinI
a b
1 1 colour1 O
2 2 colour2 O
3 3 colour3 O
4 4 colour4 O
5 5 soundi In
6 6 soundr In
7 7 sounde In
8 8 soundw In
在实际数据中,有两个以上的替换单词/字母,所以我不能再次重新运行 for 循环。我不依赖于 for 循环解决方案,但最好使用 base R,任何建议都非常感谢。
编辑
试图澄清我的问题:
每当o,out或中的一个Out发生时,df$b我想将其替换为O
每当i,in或中的一个I发生时,df$b我想将其替换为In
我可以像这样实现所需的输出:
for (word in df_repl[[1]]){
patt <- paste0('\\b', word, '\\b')
repl <- paste(names(df_repl[1]))
df$b <- gsub(patt, repl, df$b)
}
for (word in df_repl[[2]]){
patt <- paste0('\\b', word, '\\b')
repl <- paste(names(df_repl[2]))
df$b <- gsub(patt, repl, df$b)
}
但是在我的真实数据集中df_repl长度是 50 而不是两个所以我不想复制/粘贴/编辑/重新运行 for-loop 50 次