gpt4 book ai didi

r - 使用多个条件使用 dplyr 进行变异

转载 作者:行者123 更新时间:2023-12-04 16:59:24 25 4
gpt4 key购买 nike

我在下面有一个数据框 (df),我想添加一个额外的列,result , 使用 dplyr 如果 z == "gone" 将取值为 1哪里x是组 y 的最大值.

   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

这不是我想要的。我需要利用 x 的最大值对于 y 中的每个组同时检查是否 z == "gone" ,如果 TRUE 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() 中使用条件语句但我似乎找不到一个例子。请指教。

最佳答案

dplyr您可以使用:

df %>% group_by(y) %>% mutate(result = +(x == max(x) & z == 'gone'))
+(..)符号是 as.integer 的简写将逻辑输出强制为 1 和 0。有些人不喜欢它,所以这是一个更短的代码与可读性的问题。效率 yield 可以在这种情况下进行辩论。

还要欣赏什么 data.tabledplyr已经用 R 完成了数据操作,让我们用老式的“拆分-应用-组合”方式做同样的事情:
#split data.frame by group
split.df <- split(df, df$y)

#apply required function to each group
lst <- lapply(split.df, function(dfx) {
dfx$result <- +(dfx$x == max(dfx$x) & dfx$z == "gone")
dfx})

#combine result in new data.frame
newdf <- do.call(rbind, lst)

关于r - 使用多个条件使用 dplyr 进行变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com