如何合并两个有条件的数据集?

时间:2020-09-18 02:51:33

标签: r

说,我有两个数据集:

第一-收入数据集

time.sleep(1)

第二个-股票价格数据集

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

您可以忽略leap年的问题

2 个答案:

答案 0 :(得分:0)

您可以从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

答案 1 :(得分:0)

首先请注意,这里没有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!