gpt4 book ai didi

r - 使用 dplyr 到 group_by 并仅使用 if(没有 else)语句有条件地变异

转载 作者:行者123 更新时间:2023-12-02 00:55:47 25 4
gpt4 key购买 nike

我有一个数据框,我需要按列条目的组合对其进行分组,以便仅使用 if 语句(没有 else 条件)有条件地改变几列。

更具体地说,如果某个组的列值超过预定义的阈值,我想对它们求和,否则这些值应保持不变。

我试过用 if_else 来做这件事和 case_when但是这些函数需要“false”参数( if_else )或默认设置与 NA 不匹配的值( case_when ):

iris_mutated <- iris %>%
dplyr::group_by(Species) %>%
dplyr::mutate(Sepal.Length=if_else(sum(Sepal.Length)>250, sum(Sepal.Length)),
Sepal.Width=if_else(sum(Sepal.Width)>170, sum(Sepal.Width)),
Petal.Length=if_else(sum(Petal.Length)>70, sum(Petal.Length)),
Petal.Width=if_else(sum(Petal.Width)>15, sum(Petal.Width)))

iris_mutated <- iris %>%
dplyr::group_by(Species) %>%
dplyr::mutate(Sepal.Length=case_when(sum(Sepal.Length)>250 ~ sum(Sepal.Length)),
Sepal.Width=case_when(sum(Sepal.Width)>170 ~ sum(Sepal.Width)),
Petal.Length=case_when(sum(Petal.Length)>70 ~ sum(Petal.Length)),
Petal.Width=case_when(sum(Petal.Width)>15 ~ sum(Petal.Width)))

任何想法如何做到这一点?

编辑:

这是预期输出的示例。
所有物种分组条目的花瓣宽度总和为 setosa 的 12.3、virginica 的 101.3 和 versicolor 的 66.3。如果我要求这个总和应该至少为 15 来求和的值(否则应该保留原始值),那么我期望以下输出(仅显示列“Petal.Width”和“Species”):
Petal.Width    Species
1 0.2 setosa
2 0.2 setosa
3 0.2 setosa
4 0.2 setosa
5 0.2 setosa
6 0.4 setosa
7 0.3 setosa
8 0.2 setosa
9 0.2 setosa
10 0.1 setosa
#...#
50 0.2 setosa
51 66.3 versicolor
52 66.3 versicolor
53 66.3 versicolor
#...#
100 66.3 versicolor
101 101.3 virginica
102 101.3 virginica
103 101.3 virginica
#...#
150 101.3 virginica

最佳答案

我想你是在追求这个吗?使用约翰尼的方法。在总和不大于截止值的情况下,当您使用原始值作为 case_when 的一部分时,您不应该遇到错误...

iris_mutated <- iris %>% 
group_by(Species) %>%
mutate(Sepal.Length = case_when(sum(Sepal.Length) > 250 ~ sum(Sepal.Length),
T ~ Sepal.Length),
Sepal.Width = case_when(sum(Sepal.Width) > 170 ~ sum(Sepal.Width),
T ~ Sepal.Width),
Petal.Length = case_when(sum(Petal.Length) > 70 ~ sum(Petal.Length),
T ~ Petal.Length),
Petal.Width = case_when(sum(Petal.Width) > 15 ~ sum(Petal.Width),
T ~ Petal.Width))

关于r - 使用 dplyr 到 group_by 并仅使用 if(没有 else)语句有条件地变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54404043/

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