为什么[在查找值时有效[[在查找值时发生突变(R中的dplyr?

时间:2019-03-20 14:32:22

标签: r dplyr

我有一个命名向量,它实际上是一个查找表。因此,每个元素的名称代表键,而元素代表值。

我有一个数据帧,其中包含随机出现在上面向量中的键值样本。我的目的是匹配密钥并获取每个密钥的值。

使用 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

1 个答案:

答案 0 :(得分:2)

我们可以使用[代替[[,就像@Frank提到的,它需要输入参数length的差异([[-的长度为1,而{{ 1}}适用于1个或多个),并通过将'k'转换为[类来匹配'x'的名称,并从'x'获取值以创建'k2'(假设我们想要这些值)用于匹配名称,而不是基于数字索引)

character