gpt4 book ai didi

r - 如何在 R 中按月和年组合多个数据框

转载 作者:行者123 更新时间:2023-12-04 15:50:26 25 4
gpt4 key购买 nike

我在下面提到了不同的数据框:

DF1:

Origination_Date        Count1        Count2
2018-07-01 147 205
2018-07-05 180 345
2018-07-08 195 247
2018-08-04 205 788

DF2:
Date              ID
2018-07-01 I-1
2018-07-02 I-2
2018-07-02 I-3
2018-07-03 I-4
2018-07-03 I-5
2018-08-04 I-6
2018-08-04 I-7

DF3
Create_Date           ID
2018-07-01 I-1
2018-07-02 I-2
2018-07-03 I-3
2018-08-04 I-4
2018-08-04 I-5

通过利用上述多个数据框,我想按 MonthYear 创建一个新的数据框组,并按月和日期表示合并计数,如下面的示例数据框所示。

所需输出:
Month   Count1   Count2   DF2_Count(ID)    DF3_Count(ID)
Aug-18 205 788 2 2
Jul-18 522 797 5 3
Jun-18 0 0 0 0

上面提到的相同数据结构也想基于日期创建,我尝试使用 group_by 函数并且可以为每个单独的数据帧创建所需的数据帧,但不能通过合并所有数据帧。

笔记:
- 虽然我没有 Jun-18在我的数据框中的月份,我想为
同月(想要在所需的输出中创建至少三个月
考虑最近一个月的数据框(即如果它的 Sep-18Aug-18
Jul-18 )。
- 如果任何数据帧有 0 行,则显示计数 0 是必需的输出。

最佳答案

这样的事情怎么样:

# your data
df1 <- data.frame (Origination_Date = c('2018-07-01','2018-07-05','2018-07-08','2018-08-04'),
Count1 = c(147,180,195,205), Count2 = c(205,345,247,788))
df2 <- data.frame (Date = c('2018-07-01','2018-07-02','2018-07-02','2018-07-03','2018-07-03','2018-08-04','2018-08-04'),
ID = c('I-1','I-2','I-3','I-4','I-5','I-6','I-7'))
df3 <- data.frame (Create_Date = c('2018-07-01','2018-07-02','2018-07-03','2018-08-04','2018-08-04'), ID = c('I-1','I-2','I-3','I-4','I-5'))

# package to manage date
library(lubridate)

# first we create the yyyy-mm data.frame grouped
df1_1 <- df1 %>%
mutate(ym = format(ymd(Origination_Date),'%Y-%b')) %>%
group_by(ym) %>%
summarise(Count1 = sum(Count1) ,Count2 = sum(Count2))

df2_1 <- df2 %>%
mutate(ym = format(ymd(Date),'%Y-%b')) %>%
group_by(ym) %>%
summarise(DF2_Count = n())

df3_1 <- df3 %>%
mutate(ym = format(ymd(Create_Date),'%Y-%b')) %>%
group_by(ym) %>%
summarise(DF3_Count = n())


# join them together
df_1 <- df1_1 %>% full_join(df2_1, by = 'ym') %>% full_join(df3_1, by = 'ym')

> df_1
# A tibble: 2 x 5
ym Count1 Count2 DF2_Count DF3_Count
<chr> <dbl> <dbl> <int> <int>
1 2018-Aug 205 788 2 2
2 2018-Jul 522 797 5 3

现在棘手的部分,添加缺少的月份,我创建了一对 if who 检查是否没有最大月份 - 年 - 2(第二个),它添加一个假行,第一个是最后一个.
if(
format(floor_date(as.Date(max(union(union(df1[,1], df2[,1]),df3[,1]))), "month") - months(1),'%Y-%b') %in% df_1$ym == F){
df_2 <- data.frame(ym =format(floor_date(as.Date(max(union(union(df1[,1], df2[,1]),df3[,1]))), "month") - months(1),'%Y-%b'),
Count1 = 0,
Count2 = 0,
DF2_Count= 0,
DF3_Count= 0)
rbind(df_1,df_2)} else {'it already exists'}
[1] "it already exists"


if(
format(floor_date(as.Date(max(union(union(df1[,1], df2[,1]),df3[,1]))), "month") - months(2),'%Y-%b') %in% df_1$ym == F){
df_2 <- data.frame(ym =format(floor_date(as.Date(max(union(union(df1[,1], df2[,1]),df3[,1]))), "month") - months(2),'%Y-%b'),
Count1 = 0,
Count2 = 0,
DF2_Count= 0,
DF3_Count= 0)
rbind(df_1,df_2)
} else {'it already exists'}

# A tibble: 3 x 5
ym Count1 Count2 DF2_Count DF3_Count
<chr> <dbl> <dbl> <dbl> <dbl>
1 2018-Aug 205 788 2 2
2 2018-Jul 522 797 5 3
3 2018-Jun 0 0 0 0

关于r - 如何在 R 中按月和年组合多个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363532/

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