使用多个数据框中的列创建新数据框

时间:2018-04-28 09:29:38

标签: r dataframe

我有两个具有相同列名的数据框(短期和长期)。数据也是时间序列。

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)

但我希望这是一个数据框,我想保留日期元素(我已经使用此方法丢失了)

非常感谢任何帮助。

3 个答案:

答案 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)

另一个dplyrtidyr可能性

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)

给出初始数据帧的结构。