Dplyr mutate:将要作为元素的向量和要作为向量的向量区别开来

Dplyr mutate:将要作为元素的向量和要作为向量的向量区别开来,r,dplyr,R,Dplyr,我正在使用dplyr来处理数据。我有两列:x和y。在第三列中(比如z),我希望在所有x列中都有y的第一个索引 例如: 对于第一行,我得到4,因为7在x中处于第四位 所以我试过了 df <- df %>% mutate(z = which (x==y)[1]) df% 变异(z=which(x==y)[1]) 但是比较是按元素进行的(也就是说,我在z中只得到5个)。因此,我的问题是:如何区分dplyr中元素级向量和向量级向量的变化?dplyr并不决定函数是否在元素级应用mu

我正在使用dplyr来处理数据。我有两列:x和y。在第三列中(比如z),我希望在所有x列中都有y的第一个索引

例如:

对于第一行,我得到4,因为7在x中处于第四位

所以我试过了

df <- df %>% 
  mutate(z = which (x==y)[1])
df%
变异(z=which(x==y)[1])

但是比较是按元素进行的(也就是说,我在z中只得到5个)。因此,我的问题是:如何区分dplyr中元素级向量和向量级向量的变化?

dplyr
并不决定函数是否在元素级应用
mutate
只提供了一种语法,允许您更简洁地使用其他函数,因为您认识到,如果在
mutate
中引用
x
,则可能是指
df
中的
df$x
列。它还执行一个简单的广播步骤,如果您提供一个只返回单个值的函数,它将把它复制到整个输出中

我们可以在下面dplyr之外的
匹配中显示相同的行为。因为
=
执行元素级比较,所以第一个方法返回所有
5
<代码>匹配
另一方面,“返回其第一个参数在第二个参数中(第一个)匹配位置的向量”(来自文档),这是您想要的。我比较了底部的两个语法,以表明关键是您提供的函数,它决定了如何读取输入,而不是
mutate

x=c(1,2,3,7,9)
y=c(7,3,9,1,9)
x==y
#>[1]假假假假真
其中(x==y)
#> [1] 5
匹配(y,x)
#> [1] 4 3 5 1 5
图书馆(dplyr)
dfxyz1z2
#> 1 1 7  4  4
#> 2 2 3  3  3
#> 3 3 9  5  5
#> 4 7 1  1  1
#> 5 9 9  5  5

由(v0.2.0)于2018-06-29创建。

可能
变异(z=match(y,x))
。只要所有的y都在x,谢谢!这确实适用于这个特定的案例!(也让我意识到z的第二个值应该是3,而不是2!)。但是更一般的问题呢?