gpt4 book ai didi

r - 尝试在 R 中重新创建特定类型的数据透视表

转载 作者:行者123 更新时间:2023-12-02 13:21:36 25 4
gpt4 key购买 nike

所以,我目前使用 Excel 来完成一个流程,并且我想找到在 R 中执行此操作的最有效方法。

我的数据采用以下形式:

ID <- c(rep(1, 3), rep(2, 3))
Source <- rep(c("A", "A", "B"), 2)
Total <- c(11, 13, 12, 25, 27, 26)
Actions <- c(3, 2, 3, 8, 9, 10)
df <- data.frame(ID, Source, Total, Actions)
df
# ID Source Total Actions
# 1 1 A 11 3
# 2 1 A 13 2
# 3 1 B 12 3
# 4 2 A 25 8
# 5 2 A 27 9
# 6 2 B 26 10

我对 TotalActions 运行聚合:

df2 <- aggregate(cbind(Total, Actions) ~ ID + Source, 
data = df, FUN=sum)
df2
# ID Source Total Actions
# 1 1 A 24 5
# 2 2 A 52 17
# 3 1 B 12 3
# 4 2 B 26 10

但我真正想要的是 A 的总计和 B 的总计是同一个表中的单独列的情况。目前我正在这样做:

df2_A <- df2[(df2$Source == "A"), ]
df2_B <- df2[(df2$Source == "B"), ]
x <- merge(df2_A, df2_B, by.x = "ID", by.y = "ID")
x
# ID Source.x Total.x Actions.x Source.y Total.y Actions.y
# 1 1 A 24 5 B 12 3
# 2 2 A 52 17 B 26 10

我的问题是,是否有一种更优雅的方法可以一步从 df 到 x ?我觉得我现在所做的只是一个粗略的 hack,我想扩展我的 R 知识。

最佳答案

您可能希望将整个操作简化为单个管道

library(dplyr)
library(tidyr)
df %>% group_by(ID, Source) %>%
summarize_all(sum) %>% ungroup()%>%
gather(key, value, -c(ID, Source)) %>%
unite(newkey, key, Source) %>%
spread(newkey, value)
#> # A tibble: 2 x 5
#> ID Actions_A Actions_B Total_A Total_B
#> * <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 5 3 24 12
#> 2 2 17 10 52 26

关于r - 尝试在 R 中重新创建特定类型的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50143333/

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