我有一个命名向量,它实际上是一个查找表。因此,每个元素的名称代表键,而元素代表值。
我有一个数据帧,其中包含随机出现在上面向量中的键值样本。我的目的是匹配密钥并获取每个密钥的值。
使用 dplyr 包中的 mutate 即可轻松完成。但是,在查找过程中,如果尝试使用 [[]而不是 [],则会出现错误。我的理解是,对于矢量,两个函数都应返回一个矢量。
有人可以解释为什么会这样吗?下面是一个最小的可重现示例。
x <- c("1" = "a", "2" = "b", "3" = "c")
df <- data.frame(
k = sample(c(1, 2, 3), 10, replace = TRUE),
v = rnorm(10)
)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df %>%
mutate(k2 = x[k])
#> k v k2
#> 1 1 -0.7502716 a
#> 2 1 -0.4002250 a
#> 3 1 0.4878860 a
#> 4 2 1.2878120 b
#> 5 3 0.6410854 c
#> 6 3 -0.6821807 c
#> 7 1 1.4106239 a
#> 8 3 0.9909921 c
#> 9 2 0.3808955 b
#> 10 3 1.6117826 c
df %>%
mutate(k2 = x[[k]])
#> Error in x[[k]]: attempt to select more than one element in vectorIndex
答案 0 :(得分:2)
我们可以使用[
代替[[
,就像@Frank提到的,它需要输入参数length
的差异([[
-的长度为1,而{{ 1}}适用于1个或多个),并通过将'k'转换为[
类来匹配'x'的名称,并从'x'获取值以创建'k2'(假设我们想要这些值)用于匹配名称,而不是基于数字索引)
character