【问题标题】:How to merge two datasets with conditions?如何合并两个有条件的数据集?
【发布时间】:2020-09-18 15:48:49
【问题描述】:

说,我有两个数据集:

第一 - 收入数据集

Year   Month  Sales Company
1988    5      100    A
1999    2      50     B

第二个 - 股票价格数据集

Date       Company    Stock
19880530     A         200
19880531     A         201
19990225     B         500
19990229     B         506

我需要将这两个数据集合并为一个,以便将月底日期的股票价格(来自第二个数据集)合并到收入数据集中的相应月份(在第二个数据集中)

所以输出将是:

Year   Month  Sales Company  Stock
1988    5      100    A       201
1999    2      50     B       506

你可以忽略闰年的问题

【问题讨论】:

  • 第一个数据集的第二年应该是 1999 年吗?
  • 是的,感谢指正

标签: r


【解决方案1】:

您可以从Date 列中提取月份和日期,并为每个Company 和每个Month 选择最大date 的行。然后将此数据加入revenue 数据和select 所需列。

library(dplyr)

stock %>%
  mutate(date = as.integer(substring(Date, 7)), 
         Month = as.integer(substring(Date, 5, 6))) %>%
  group_by(Company, Month) %>%
  slice(which.max(date)) %>%
  inner_join(revenue, by = c('Company', 'Month')) %>%
  ungroup %>%
  select(Year,Month ,Sales,Company,Stock)

#  Year Month Sales Company Stock
#  <int> <int> <int> <chr>   <int>
#1  1988     5   100 A         201
#2  2000     2    50 B         506

【讨论】:

  • 您从哪里获得收入?请注意:销售额位于不同的数据框中。
  • 我认为第一个数据框的名称是 revenue 数据框,第二个是 stock ?所以我认为你必须使用sales而不是revenue?
【解决方案2】:

首先注意这里不是 1999-02-29!

要获得月末,请在下个月的第一天使用 ISOdate 并减去一天。然后只需merge他们。

merge(transform(fi, Date=as.Date(ISOdate(fi$Year, fi$Month + 1, 1)) - 1), 
      transform(se, Date=as.Date(as.character(Date), format="%Y%m%d")))[-2]
#   Company Year Month Sales Stock
# 1       A 1988     5   100   201
# 2       B 1999     2    50   506

数据:

fi <- read.table(header=T, text="Year   Month  Sales Company
1988    5      100    A
1999    2      50     B")
se <- read.table(header=T, text="Date       Company    Stock
19880530     A         200
19880531     A         201
19990225     B         500
19990228     B         506")  ## note: date corrected!

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2016-08-01
    • 2020-12-21
    • 2011-11-18
    • 2017-07-04
    • 2022-06-10
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多