gpt4 book ai didi

r - 使用 dplyr 到 group_by 并按组有条件地改变数据帧

转载 作者:行者123 更新时间:2023-12-01 11:21:05 25 4
gpt4 key购买 nike

我想使用 dplyr 函数来 group_by 并有条件地改变 df。鉴于此示例数据:

A   B   C   D
1 1 1 0.25
1 1 2 0
1 2 1 0.5
1 2 2 0
1 3 1 0.75
1 3 2 0.25
2 1 1 0
2 1 2 0.5
2 2 1 0
2 2 2 0
2 3 1 0
2 3 2 0
3 1 1 0.5
3 1 2 0
3 2 1 0.25
3 2 2 1
3 3 1 0
3 3 2 0.75

我想使用新列 E 根据 B == 1、C == 2 和 D > 0 对 A 进行分类。对于所有这些条件都成立的 A 的每个唯一值,则 E = 1,否则 E = 0. 所以,输出应该是这样的:
A   B   C   D    E
1 1 1 0.25 0
1 1 2 0 0
1 2 1 0.5 0
1 2 2 0 0
1 3 1 0.75 0
1 3 2 0.25 0
2 1 1 0 1
2 1 2 0.5 1
2 2 1 0 1
2 2 2 0 1
2 3 1 0 1
2 3 2 0 1
3 1 1 0.5 0
3 1 2 0 0
3 2 1 0.25 0
3 2 2 1 0
3 3 1 0 0
3 3 2 0.75 0

我最初尝试了此代码,但条件似乎无法正常工作:
 foo$E <- foo %>% 
group_by(A) %>%
mutate(E = {if (B == 1 & C == 2 & D > 0) 1 else 0})

任何见解表示赞赏。谢谢!

最佳答案

@eipi10 的答案有效。但是,我认为您应该使用 case_when而不是 ifelse .它是矢量化的,在更大的数据集上会更快。

foo %>% group_by(A) %>%
mutate(E = case_when(any(B == 1 & C == 2 & D > 0) ~ 1, TRUE ~ 0))

关于r - 使用 dplyr 到 group_by 并按组有条件地改变数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980374/

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