You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tidyr::pivot_wider处理重复值:新增行不重复其他列值及优化

问题描述

初始需求与问题

我需要用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))

# 所用代码
df %>% 
  mutate(cnt = row_number(), .by = Position) %>%
  pivot_wider(names_from = Position, 
              values_from = Name) %>%
  select(-cnt) %>%
  arrange(RK)

当前结果

# 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的第一行包含所有名称,NA值置于名称之后,这样RK ==3只需2行而非3行;同时RK ==4只需1行。

内容的提问来源于stack exchange,提问作者melmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:05:14