我有一个数据框(df),如下所示,我想使用dplyr添加一个额外的列result
,如果z == "gone"
且组y
中的x
是最大值,则该列将取值为1。
y x z
1 a 3 gone
2 a 5 gone
3 a 8 gone
4 a 9 gone
5 a 10 gone
6 b 1
7 b 2
8 b 4
9 b 6
10 b 7
如果我只是选择每个组的最大值,那么结果将是:
df %>%
group_by(y) %>%
slice(which.max(x))
这将返回:
y x z
1 a 10 gone
2 b 7
这不是我想要的。我需要利用每个 y
组中 x
的最大值,同时检查是否满足 z == "gone"
,如果满足则为 1,否则为 0。代码如下:
y x z result
1 a 3 gone 0
2 a 5 gone 0
3 a 8 gone 0
4 a 9 gone 0
5 a 10 gone 1
6 b 1 0
7 b 2 0
8 b 4 0
9 b 6 0
10 b 7 0
我认为我需要在mutate()
内使用条件语句,但是我似乎找不到一个例子。请给予建议。
df %>% group_by(y) %>% mutate(result = ifelse(x == max(x) & z == "gone", 1, 0))
- Ryan Erwin+(x==max(x) & z=='gone'
应该对dplyr
来说非常快速。 - akrun+(....)
。你知道在哪里可以找到关于这个语法的文档吗? - Ryan Erwin