【发布时间】:2014-07-14 18:53:44
【问题描述】:
在尝试回答this question 时,我遇到了mutate 和transform 之间的差异,这是我期望的等效操作。
# data
x <- data.frame(a=c(rep(0,10),rep(1,10),3),b=c(1:10,0,11:19,0))
#transform
transform(x,a=pmin(a,b), b=pmax(a,b))
a b
1 0 1
2 0 2
3 0 3
4 0 4
5 0 5
6 0 6
7 0 7
8 0 8
9 0 9
10 0 10
11 0 1
12 1 11
13 1 12
14 1 13
15 1 14
16 1 15
17 1 16
18 1 17
19 1 18
20 1 19
21 0 3
#mutate
libarary(dplyr)
x %>% mutate(a=pmin(a,b), b=pmax(a,b))
a b
1 0 1
2 0 2
3 0 3
4 0 4
5 0 5
6 0 6
7 0 7
8 0 8
9 0 9
10 0 10
11 0 0
12 1 11
13 1 12
14 1 13
15 1 14
16 1 15
17 1 16
18 1 17
19 1 18
20 1 19
21 0 0
请注意第 11 行和第 21 行的差异。我怀疑mutate 正在改变数据,因此pmax 看不到原始数据。它是否正确?这是一个错误,还是设计使然?
【问题讨论】:
-
你说得对,这是设计使然(档案中有一些讨论,我忘了在哪里)。
-
@baptiste 谢谢,我想我现在明白为什么了:允许在同一命令中使用计算变量,因此需要明确引用原件。