我正在使用replace函数用列表中的字符替换数字,但似乎需要在索引列表中添加一个额外的值才能使代码正常工作。 (请参见示例)
按问题的简单版本是我有一个列表(0,1),我想用“ a”替换0,用“ b”替换1。
replace(0:1, 0:1, c("a","b"))
产生以下结果
[1] "a" "1"
Warning message:
In x[list] <- values :
number of items to replace is not a multiple of replacement length
将索引列表扩展到0:2时,我会得到所需的输出
> replace(0:1, 0:2, c("a","b"))
[1] "a" "b"
我显然不了解replace函数的工作原理,但似乎无法弄清丢失的内容。
答案 0 :(得分:1)
要替换的第二个参数是索引列表(不是值),R使用基于1的索引。 0:1仅包含1个有效索引。因此,
replace(0:1, 0:1, c("a","b"))
等同于
replace(0:1, 1, c("a","b"))
生成警告消息。
似乎您真的在从plyr软件包中寻找mapvalues的功能。例如,
x <- c(2,3,5,7,11)
plyr::mapvalues(x,c(3,7),c(10,12))
这将导致输出:
[1] 2 10 5 12 11
mapvalues
是plyr函数的一个示例,在较新的dplyr软件包中没有直接的模拟。参见this question。不建议同时使用两个软件包。这就是为什么我使用更明确的plyr::mapvalues()
而不是首先使用library(plyr)
然后使用简单的mapvalues()
的原因。