r - 如何将列表中的数据框添加在一起但仅用于匹配日期
问题描述
我有一个数据帧列表,我想将这些数据帧合并到一个数据帧中。我希望解决两个问题:
- 如何将列加在一起
- 如何仅在列表中的所有 dfs 中包含共同日期
这就是我所拥有的:
library(tidyverse)
library(lubridate)
df1 <- data.frame(
date = ymd(c("2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04",
"2019-02-05")),
x = c(1, 2, 3, 4, 5),
y = c(2, 3, 4, 5, 6),
z = c(3, 4, 5, 6, 7)
)
df2 <- data.frame(
date = ymd(c("2019-02-01", "2019-02-02", "2019-02-04", "2019-02-05")),
x = c(1, 2, 3, 4),
y = c(2, 3, 4, 5),
z = c(3, 4, 5, 6)
)
df3 <- data.frame(
date = ymd(c("2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04")),
x = c(1, 2, 3, 4),
y = c(2, 3, 4, 5),
z = c(3, 4, 5, 6)
)
dfl <- list(df1, df2, df3)
这是我正在寻找的输出:
data.frame(
date = ymd(c("2019-02-01", "2019-02-02", "2019-02-04")),
x = c(3, 6, 11),
y = c(6, 9, 14),
z = c(9, 12, 17)
)
我已经尝试inner_join
过遍历列表,但它太复杂了,我仍然没有设法找到答案。有没有更干净的方法来获得最终答案
解决方案
这个怎么样?
bind_rows(dfl) %>%
group_by(date) %>%
mutate(n = 1) %>%
summarise_all(sum) %>%
filter(n == length(dfl)) %>%
select(-n)
## A tibble: 3 x 4
# date x y z
# <date> <dbl> <dbl> <dbl>
#1 2019-02-01 3 6 9
#2 2019-02-02 6 9 12
#3 2019-02-04 11 14 17
date
这假设在单个data.frame
of中没有重复的 s dfl
。
推荐阅读
- django - 无法从表单创建对象
- android - 在 iOS 和 Android 上动态更改应用程序图标
- istio - 将 K8s Ingress 与 Istio 网关一起使用?
- firebase - Arduino wifi > firebase 和超过 1 个 LED 控制
- python - 美丽的汤没有为使用相同 URL 的两个不同程序找到相同的结果
- python - 年龄输入,制作有年龄和年龄组的小系统
- sql-server - 在 SQL 中,循环子项以在每个级别获得销售额的最佳方法是什么?
- twitter-bootstrap - 如何使用 ViewChild 在 ngAfterViewInit 方法上打开模式?
- awk - 仅将大写单词转换为小写以取消名词的大写
- ffmpeg - 如何处理 ffplay 播放 iPhone 的视频太慢?