说,我有两个数据集:
第一-收入数据集
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年的问题
答案 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!