gpt4 book ai didi

r - 在 R 中的 dplyr 中分组后如何保留其他变量?

转载 作者:行者123 更新时间:2023-12-05 09:27:24 25 4
gpt4 key购买 nike

今天之前我发布了这个问题 here但我还有一个问题被提出来了。

如果我必须在原始数据框中添加更多变量(位置、高度):

var = c(rep("A",3),rep("B",2),rep("C",5));var
date = c(as.Date("2022/01/01"),as.Date("2022/02/01"),as.Date("2022/03/01"),
as.Date("2022/01/01"),as.Date("2022/03/01"),
as.Date("2022/01/01"),as.Date("2022/01/01"),as.Date("2022/02/01"),as.Date("2022/02/01"),as.Date("2022/03/01"))
loc = c(rep("london",3),rep("berlin",2),rep("cairo",5))
height =c(13,14,15,13,15,16,12,14,13,15)
data = tibble(var,date,loc,height);data

如何在每个月保留 loc 变量的相应值和高度的总和(另外在之前回答的问题中)?

理想情况下,它现在必须看起来像这样:

<表类="s-表"><头>变量季度<日>月 条件位置高度<正文>一个11正确伦敦13一个12正确伦敦14一个13正确伦敦15B11正确柏林13B12错误柏林0B13正确柏林15C11正确开罗28C12正确开罗27C13正确开罗15

有什么帮助吗?我如何使用 dplyr 在 R 中做到这一点?

最佳答案

在前面的解决方案中,在 distinct 中添加 .keep_all = TRUE 然后 fill loc 列先前的非 NA 值

library(dplyr)
library(tidyr)
library(lubridate)
data %>%
mutate(month = lubridate::month(date)) %>%
group_by(var, month) %>%
mutate(height = sum(height)) %>%
ungroup %>%
complete(var, month, fill = list(height = 0)) %>%
mutate(Quarter = quarter, Condition = !is.na(date)) %>%
distinct(var, month, Quarter, Condition, .keep_all = TRUE) %>%
fill(loc) %>%
select(-date)

-输出

# A tibble: 9 × 6
var month loc height Quarter Condition
<chr> <dbl> <chr> <dbl> <dbl> <lgl>
1 A 1 london 13 1 TRUE
2 A 2 london 14 1 TRUE
3 A 3 london 15 1 TRUE
4 B 1 berlin 13 1 TRUE
5 B 2 berlin 0 1 FALSE
6 B 3 berlin 15 1 TRUE
7 C 1 cairo 28 1 TRUE
8 C 2 cairo 27 1 TRUE
9 C 3 cairo 15 1 TRUE

关于r - 在 R 中的 dplyr 中分组后如何保留其他变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72467405/

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