gpt4 book ai didi

r - 合并不同因子水平下的数据,同时保留原始水平

转载 作者:行者123 更新时间:2023-12-01 11:14:24 26 4
gpt4 key购买 nike

我想为以下问题提供一个 tidyverse 解决方案。在我的数据集中,我有各种因子水平的数据。我想创建一个新的因子级别“总计”,它是 X 的现有因子级别上所有值 Y 的总和。例如,可以使用以下方法完成:

mutate(Data, X = fct_collapse(X, Total = c("A", "B", "C", "D"))) %>%
group_by(X) %>%
summarize(Y = sum(Y))

但是,这也必然会覆盖原始因子水平。我必须在额外的步骤中将原始数据集与新的折叠数据集结合起来。

我过去用来保留原始级别的一种解决方案是将数据放入宽格式并继续 rowwise()mutate()使用“总计”创建一个新变量,然后重新整形回长。
spread(Data, key = X, value = Y) %>%
rowwise() %>%
mutate(Total = sum(A, B, C, D)) %>%
gather(1:5, key = "X", value = "Y")

但是,自从使用 rowwise() 以来,我对这个解决方案非常不满意。不被认为是好的做法。如果您能指出一个可用的替代解决方案如何在保留原始水平的同时合并不同因子水平下的数据,那就太好了。

最小可重现示例:
Data<-data.frame(
X = factor(c("A", "B", "C", "D")),
Y = c(1000, 2000, 3000, 4000))

预期结果:
# A tibble: 5 x 2
X Y
<chr> <dbl>
1 A 1000
2 B 2000
3 C 3000
4 D 4000
5 Total 10000

最佳答案

使用 图书馆,这很简单。

Data %>% janitor::adorn_totals("row") %>% mutate(X=factor(X))

# X Y
# A 1000
# B 2000
# C 3000
# D 4000
# Total 10000
查看输出结构:
str(output)

# 'data.frame': 5 obs. of 2 variables:
# $ X: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
# $ Y: num 1000 2000 3000 4000 10000

关于r - 合并不同因子水平下的数据,同时保留原始水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54654467/

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