首页 > 解决方案 > 重塑数据框

问题描述

我有与以下非常相似的数据框

指数 日期 结果
AAA111 2021 年 5 月 19 日
AAA111 29/05/2021 失去
AAA112 2021 年 5 月 19 日
AAA112 24/05/2021
AAA113 29/05/2021 失去

我想得到这样的东西

指数 日期_1 日期_2 结果_day_1 结果_day_2
AAA111 2021 年 5 月 19 日 29/05/2021 失去
AAA112 2021 年 5 月 19 日 24/05/2021
AAA113 29/05/2021 不适用 失去 不适用

并非所有指数的天数都与上述相同。

标签: r

解决方案


我们可以使用pivot_wider

library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
    mutate(nm =  rowid(index)) %>% 
    pivot_wider(names_from = nm, values_from = c(date, result))

-输出

# A tibble: 3 × 5
  index  date_1     date_2     result_1 result_2
  <chr>  <chr>      <chr>      <chr>    <chr>   
1 AAA111 19/05/2021 29/05/2021 Win      Lose    
2 AAA112 19/05/2021 24/05/2021 Win      Win     
3 AAA113 29/05/2021 <NA>       Lose     <NA>    

或与data.table

library(data.table)
dcast(setDT(df1), index ~ rowid(index), value.var = c('date', 'result'))
    index     date_1     date_2 result_1 result_2
1: AAA111 19/05/2021 29/05/2021      Win     Lose
2: AAA112 19/05/2021 24/05/2021      Win      Win
3: AAA113 29/05/2021       <NA>     Lose     <NA>

数据

df1 <- structure(list(index = c("AAA111", "AAA111", "AAA112", "AAA112", 
"AAA113"), date = c("19/05/2021", "29/05/2021", "19/05/2021", 
"24/05/2021", "29/05/2021"), result = c("Win", "Lose", "Win", 
"Win", "Lose")), class = "data.frame", row.names = c(NA, -5L))

推荐阅读