我需要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
型
预期结果:
# A tibble: 2 × 4
dates a b c
<dbl> <dbl> <dbl> <dbl>
1 6 1 2 3
2 NA NA NA 4
型
更新
使用下面的答案,我能够接近我需要的东西。
下面是一个更复杂的数据集:
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
型
剩余问题对于RK == 3,我希望移动结果,以便RK ==3的第1行包含所有名称,该行的NA显示在名称之后。因此,在本例中,RK ==3只需要2行名称,而不是3行,RK == 4只需要1行。
2条答案
按热度按时间w6mmgewl1#
在更复杂的示例中,您需要按RK和Position分组,以获得所描述的结果,即
字符串
创建日期:2023年7月26日,使用reprex v2.0.2
你的问题解决了吗?或者,你还想做进一步的“调整”?
dxxyhpgq2#
一个简单的解决方案可能是在
mutate()
内使用dplyr::row_number()
创建行号,然后使用pivot_wider
:字符串
输出量:
型
这里和你想要的输出的唯一区别是
dates
始终有值,从我的Angular 看,这似乎是合乎逻辑的。但是,如果你希望所有后续示例都是NA
,你可以简单地添加一个mutate
:型
输出量
型