我需要pivot_wider
个我的数据集.我希望将重复的值添加到新行中(而不是将重复的值显示为列表).下面的代码是我试图实现这一点的方法.使用此代码,列出的项将移动到新列,但该行中的其他值将被复制.
df = data.frame(variables = c('a', 'b', 'c', 'c'),
values = c(1, 2, 3, 4),
dates = c(6, 6, 6, 6))
df_wide <- df %>%
pivot_wider(names_from = variables,
values_from = values,
values_fill = NA,
values_fn = list) %>%
unnest()
结果:
# A tibble: 2 × 4
dates a b c
<dbl> <dbl> <dbl> <dbl>
1 6 1 2 3
2 6 1 2 4
Desired 结果:
# A tibble: 2 × 4
dates a b c
<dbl> <dbl> <dbl> <dbl>
1 6 1 2 3
2 NA NA NA 4
UPDATE个
使用下面的答案,我能够接近我需要的东西.
以下是一个更复杂的数据集:
df <- data.frame(RK = c(1,1,1,1,
1,1,1,1,
1,2,2,2,
1,2,2,3,
3,3,3,3,
3,3,3,4,
4,4,5,5,
6,6,6,6,
7,7,7,7),
Name = paste0("Name", seq(1:36)),
Position = rep(paste("POS", seq(1:4)),9))
# Code
df %>%
mutate(cnt = row_number(), .by = Position) %>%
pivot_wider(names_from = Position,
values_from = Name) %>%
select(-cnt) %>%
arrange(RK)
# Result
# A tibble: 14 × 5
RK `POS 1` `POS 2` `POS 3` `POS 4`
<dbl> <chr> <chr> <chr> <chr>
1 1 Name1 Name2 Name3 Name4
2 1 Name5 Name6 Name7 Name8
3 1 Name9 NA NA NA
4 1 Name13 NA NA NA
5 2 NA Name10 Name11 Name12
6 2 NA Name14 Name15 NA
7 3 NA NA NA Name16
8 3 Name17 Name18 Name19 Name20
9 3 Name21 Name22 Name23 NA
10 4 NA NA NA Name24
11 4 Name25 Name26 NA NA
12 5 NA NA Name27 Name28
13 6 Name29 Name30 Name31 Name32
14 7 Name33 Name34 Name35 Name36
Remaining issue个 对于rk==3,我希望将结果移位,以便rk==3的第1行包含所有姓名,并且该行的Nas显示在姓名之后.因此,在本例中,RK==3将只需要2行名称,而不是3行,而RK==4将只需要1行.