我有一个向量,我想用多个元素替换一个元素,我可以用一个而不是多个替换,任何人都可以帮忙吗?
比如我有
data <- c('a', 'x', 'd')
> data
[1] "a" "x" "d"
Run Code Online (Sandbox Code Playgroud)
我想,以取代"x"与"b", "c"获得
[1] "a" "b" "c" "d"
Run Code Online (Sandbox Code Playgroud)
然而
gsub('x', c('b', 'c'), data)
Run Code Online (Sandbox Code Playgroud)
给我
[1] "a" "b" "d"
Warning message:
In gsub("x", c("b", "c"), data) :
argument 'replacement' has length > 1 and only the first element will
be used
Run Code Online (Sandbox Code Playgroud)
这是我要解决的方法:
data <- c('a', 'x', 'd')
lst <- as.list(data)
unlist(lapply(lst, function(x) if(x == "x") c("b", "c") else x))
# [1] "a" "b" "c" "d"
Run Code Online (Sandbox Code Playgroud)
我们利用了事实,即列表结构比原子向量更灵活。我们可以将length-1的list-element替换为length> 1的元素,然后取消列出结果以返回到原子向量。
由于您要替换“ x”的完全匹配项,因此在这种情况下,我不想使用sub/ gsub。