首页 > 解决方案 > 对每个 id 重复前两行两次

问题描述

我想为每个 id 重复前两行两次。我不知道该怎么做。有人有建议吗?

id <- rep(1:4,each=6)
scored <- c(12,13,NA,NA,NA,NA,14,20,NA,NA,NA,NA,23,56,NA,NA,NA,NA, 45,78,NA,NA,NA,NA)

df <- data.frame(id,scored)
 df
   id scored
1   1     12
2   1     13
3   1     NA
4   1     NA
5   1     NA
6   1     NA
7   2     14
8   2     20
9   2     NA
10  2     NA
11  2     NA
12  2     NA
13  3     23
14  3     56
15  3     NA
16  3     NA
17  3     NA
18  3     NA
19  4     45
20  4     78
21  4     NA
22  4     NA
23  4     NA
24  4     NA
> 

我希望它看起来像:

df
   id score
1   1    12
2   1    13
3   1    12
4   1    13
5   1    12
6   1    13
7   2    14
8   2    20
9   2    14
10  2    20
11  2    14
12  2    20
13  3    23
14  3    56
15  3    23
16  3    56
17  3    23
18  3    56
19  4    45
20  4    78
21  4    45
22  4    78
23  4    45
24  4    78
> 

..................................................... ..................................................... .....................................................

标签: r

解决方案


我们可以rep对 'scored' 的非 NA 元素进行分组

library(dplyr)
df %>%         
  group_by(id) %>%
  mutate(scored = rep(scored[!is.na(scored)], length.out = n()))
# A tibble: 24 x 2
# Groups:   id [4]
#      id scored
#   <int>  <dbl>
# 1     1     12
# 2     1     13
# 3     1     12
# 4     1     13
# 5     1     12
# 6     1     13
# 7     2     14
# 8     2     20
# 9     2     14
#10     2     20
# … with 14 more rows

推荐阅读