其他人询问如何使用complete
函数来填补空白,但我希望将其他几个列分组,然后填写缺失的日期。
我有一个包含许多列的数据框,为简单起见,我只显示4列这样的
data <- data.frame(groups = c('A', 'A','A','A','A','A','A','A','A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'),
date = c(6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535),
days = c(1, 2, 4, 7, 11, 12, 13, 14, 15, 1, 3, 4, 5, 6, 9, 10, 12, 13, 14),
price = c(64, 82, 31, 77, 21, 39, 79, 67, 45, 66, 24, 60, 64, 56, 41, 29, 60, 57, 68))
我想为缺少的日子创建新行,以便我得到一个像这样的表
groups date days price
1 A 6535 1 64
2 A 6535 2 82
3 A 6535 3 NA
4 A 6535 4 31
5 A 6535 5 NA
6 A 6535 6 NA
7 A 6535 7 77
8 A 6535 8 NA
9 A 6535 9 NA
10 A 6535 10 NA
11 A 6535 11 21
12 A 6535 12 39
13 A 6535 13 79
14 A 6535 14 67
15 A 6535 15 45
16 B 6535 1 66
17 B 6535 2 NA
18 B 6535 3 24
19 B 6535 4 60
20 B 6535 5 64
21 B 6535 6 56
22 B 6535 7 NA
23 B 6535 8 NA
24 B 6535 9 41
25 B 6535 10 29
26 B 6535 11 NA
27 B 6535 12 60
28 B 6535 13 57
29 B 6535 14 68
30 B 6535 15 NA
因此,我希望按groups
和date
进行分组,然后浏览days
列(范围为1到15)并添加一行,用于复制行的缺失日期基于groups
的{{1}}和date
,group by
列的值为price
。
答案 0 :(得分:2)
查看名为tidyr
complete
函数
library(dplyr)
library(tidyr)
data %>% group_by(date,groups) %>% complete(days = 1:15)
# # A tibble: 30 x 4
# # Groups: date, groups [2]
# date groups days price
# <dbl> <fct> <dbl> <dbl>
# 1 6535 A 1.00 64.0
# 2 6535 A 2.00 82.0
# 3 6535 A 3.00 NA
# 4 6535 A 4.00 31.0
# 5 6535 A 5.00 NA
# 6 6535 A 6.00 NA
# 7 6535 A 7.00 77.0
# 8 6535 A 8.00 NA
# 9 6535 A 9.00 NA
# 10 6535 A 10.0 NA
# # ... with 20 more rows