我有两个具有相同列名的数据框(短期和长期)。数据也是时间序列。
Austria<-c(21000, 23400, 26800)
Aruba<-c(50282, 234934, 34634)
Date<- as.Date(c('2010-01-01','2010-04-01','2010-01-07'))
shortterm.df <- data.frame(Date,Austria, Aruba)
Austria <- c(23423, 457, 45457)
Aruba <- c(7768, 67679, 67979)
Date <- as.Date(c('2010-01-01','2010-04-01','2010-01-07'))
longterm.df <- data.frame(Date,Austria, Aruba)
我想提取奥地利数据,以便我有一个看起来像
的新数据集 Date shortterm longterm
2010-01-01 21000 23423
2010-04-01 23400 457
2010-01-07 26800 45457
到目前为止,我所尝试的是将数据合并到一个列表中
df.list <-list(shortterm.df,longterm.df)
并使用了lapply
setNames(do.call(cbind, lapply(df.list, `[`, 'Austria')), nm1)
但我希望这是一个数据框,我想保留日期元素(我已经使用此方法丢失了)
非常感谢任何帮助。
答案 0 :(得分:1)
library(dplyr)
library(tidyr)
dat <- list(shortterm.df, longterm.df) %>%
setNames(c("shortterm", "longterm")) %>%
bind_rows(.id = "Data") %>%
select(-Aruba) %>%
spread(Data, Austria)
dat
# Date longterm shortterm
# 1 2010-01-01 23423 21000
# 2 2010-01-07 45457 26800
# 3 2010-04-01 457 23400
答案 1 :(得分:1)
另一个dplyr
和tidyr
可能性
library(tidyr)
library(dplyr)
inner_join(gather(shortterm.df, key = country, value = shortterm, -Date),
gather(longterm.df, key = country, value = longterm, -Date)) %>%
filter(country == "Austria")
Joining, by = c("Date", "country")
Date country shortterm longterm
1 2010-01-01 Austria 21000 23423
2 2010-04-01 Austria 23400 457
3 2010-01-07 Austria 26800 45457
答案 2 :(得分:0)
这样的事情会起作用吗?
Austria.short <- c(21000, 23400, 26800)
Austria.long <- c(23423, 457, 45457)
Date <- as.Date(c('2010-01-01','2010-04-01','2010-01-07'))
df <- cbind(Date,Austria.long,Austria.short)
df <- as.data.frame(df)
编辑:
您也可以使用
df <- cbind(Date,longterm.df$Austria,shortterm.df$Austria)
df <- as.data.frame(df)
给出初始数据帧的结构。