r - 如何使用 R 合并具有多列的数据框?
问题描述
我制作了一个由代码组成的数据框,代码如下:
dates <- as.character(seq(as.Date('2015-01-01'),as.Date('2019-06-30'),by = "1
day"))
dates <- as.data.frame(dates)
dates$date_general_ledger <- ymd(dates$date_general_ledger)
数据框如下所示:
`date_general_ledger
1 2015-01-01
2 2015-01-02
3 2015-01-03
4 2015-01-04
5 2015-01-05
6 2015-01-06
然后我有包含日期、account_id 和 value 的数据框
`# A tibble: 6 x 3
account_id date_general_ledger amount
<int> <chr> <dbl>
1 A 2015-01-01 110
2 A 2015-01-03 200
3 B 2015-01-02 50
我正在尝试下面的代码合并
`dates %>%
left_join(df3, by="account_id")
它不会将 2015-01-02 值作为“NA”而不是“A”,因为它没有在加入时考虑 account_id。
解决方案
这里的大问题是您的连接无效。当您连接两个数据 data.frames 时,被连接的列必须在两个 data.frames 中。dates
data.frame 不包含该列,因此您拥有的联接account_ID
将不起作用。他们唯一的共同点是date_general_ledger
,所以你可以加入。
dates %>%
left_join(df3, by="date_general_ledger") %>%
tibble()
# A tibble: 1,642 x 3
date_general_ledger account_id amount
<date> <chr> <dbl>
1 2015-01-01 A 110
2 2015-01-02 B 50
3 2015-01-03 A 200
4 2015-01-04 NA NA
5 2015-01-05 NA NA
6 2015-01-06 NA NA
7 2015-01-07 NA NA
8 2015-01-08 NA NA
9 2015-01-09 NA NA
10 2015-01-10 NA NA
# ... with 1,632 more rows
df3 %>%
full_join(dates, by="date_general_ledger") %>%
tibble()
# A tibble: 1,642 x 3
account_id date_general_ledger amount
<chr> <date> <dbl>
1 A 2015-01-01 110
2 A 2015-01-03 200
3 B 2015-01-02 50
4 NA 2015-01-04 NA
5 NA 2015-01-05 NA
6 NA 2015-01-06 NA
7 NA 2015-01-07 NA
8 NA 2015-01-08 NA
9 NA 2015-01-09 NA
10 NA 2015-01-10 NA
# ... with 1,632 more rows
这些中的任何一个都是您正在寻找的吗?如果没有,那么您的dates
data.frame 需要有另一列。
dates
准备data.frame时也存在一些小问题。
# This code throws an error. You should set by = "day"
dates <- as.character(seq(as.Date('2015-01-01'), as.Date('2019-06-30'), by = "1
day"))
# This code also throws an error because that column was not defined in the data.frame.
dates$date_general_ledger <- ymd(dates$date_general_ledger)
以下代码用于设置dates
.
dates <- as.character(seq(as.Date('2015-01-01'),as.Date('2019-06-30'),by = "day"))
dates <- data.frame(date_general_ledger = ymd(dates))
这是设置缩写的代码df3
df3 <- tibble(account_id = LETTERS[1:3],
date_general_ledger = ymd(c("2015-01-01", "2015-01-03", "2015-01-02")),
amount = c(110, 200, 50))
推荐阅读
- ios - 无法将数据传输回 ViewController
- php - 调用类后不返回任何方法
- android - 在 TableLayout 中丢失空间
- reactjs - 如何测试 React 可加载组件
- sql - Postgres:将更新查询组合到分层表上的一个查询
- php - 运行 cronjob 时找不到类 CI_controller
- hibernate - Hibernate Search 查询名字和姓氏
- swift - 通用二维数组上的 Swift 方法
- c# - Roslyn / .NET Compiler Platform 获取当前项目 C# 语言版本
- android - 使用 MediaPlayer 同时播放多个音频