我正在使用替换函数将列表中的数字替换为字符,但似乎需要向索引列表添加一个额外的值才能使代码正常工作。(见示例(
问题的简单版本是我有一个列表(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"
我显然不明白替换功能是如何工作的,但我似乎无法弄清楚我错过了什么。
要替换的第二个参数是索引列表(不是值(,R 使用基于 1 的索引。 0:1 仅包含 1 个有效索引。因此,实际上,
replace(0:1, 0:1, c("a","b"))
相当于
replace(0:1, 1, c("a","b"))
这将生成警告消息。
看来您真的在从 plyr 包中寻找映射值的功能。例如
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 中没有直接模拟。看到这个问题。不建议同时使用这两个包。 这就是为什么我使用更明确的plyr::mapvalues()
而不是先library(plyr)
然后简单地mapvalues()
。