在 R 中按组将数据从 Long 重塑为 Wide

Posted

技术标签:

【中文标题】在 R 中按组将数据从 Long 重塑为 Wide【英文标题】:Reshaping Data from Long to Wide by Group in R 【发布时间】:2018-08-14 21:14:55 【问题描述】:

我有一个数据集给我带来了一些麻烦。我没想到它会变成这么复杂的问题,但现在我觉得它已经发生了。

我有一个看起来和这个有点相似的数据集

CaseInfoColNames   CaseInfoData  UID  RunTime 
**WarrantCase**    XXXXXXXXXXXX  P19  TIME
Desc               .             P19  TIME 
Bond               500           P19  TIME
Remarks            No License    P19  TIME 
**WarrantCase**    YYYYYYYYYYYY  P19  TIME
Desc               .             P19  TIME
Bond               200           P19  TIME 
**CaseNumber**     123456789134  X20  TIME
Desc               BOND          X20  TIME 
Bond               1000          X20  TIME
CommentCase        DIV 2         X20  TIME
Charge             Drive w.o.Lic X20  TIME

基本上,有 ID,每个 ID 可以有两种类型,“保证案例”或“案例编号”。这两个标题下方的行应成为列标题。每个 ID 可能有多行,我意识到某些列标题不会相同,所以也有办法填写 NA。理想情况下,也许数据可能看起来像这样,但如果这太麻烦了,也许最好保留长格式?非常感谢!

UID  RunTime WarrantCase  Desc Bond Remarks 
P19  TIME    XXXXXXXXXXXX  .    500 No License
P19  TIME    YYYYYYYYYYYY  .    200  NA
X20  TIME    NA           BOND  1000 NA

CaseNumber CommentCase Charge     
  NA         NA           NA
  NA         NA           NA    
  123..    DIV 2          Drive w.o. Lic

【问题讨论】:

【参考方案1】:

诀窍是为每个案例创建一个唯一的 ID,以便每个案例的所有行都具有相同的 ID:

df1 %>% 
  mutate(caseID = cumsum(as.numeric(grepl("\\*\\*",df1$CaseInfoColNames)))) %>% 
  spread(CaseInfoColNames,CaseInfoData)

 UID RunTime caseID **CaseNumber** **WarrantCase** Bond        Charge CommentCase Desc    Remarks
1 P19    TIME      1           <NA>    XXXXXXXXXXXX  500          <NA>        <NA>    . No.License
2 P19    TIME      2           <NA>    YYYYYYYYYYYY  200          <NA>        <NA>    .       <NA>
3 X20    TIME      3   123456789134            <NA> 1000 Drive.w.o.Lic       DIV.2 BOND       <NA>

如果需要,您可以稍后删除 caseID 列

【讨论】:

以上是关于在 R 中按组将数据从 Long 重塑为 Wide的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用reshape函数将dataframe数据从长表变换为宽表(long format to wide format)

R语言使用tidyr包的spread函数将dataframe数据从长表变换为宽表(long format to wide format)

R 提取最常见的单词)/ n 克在列中按组

按组将数据框日期拆分为单个最小最大日期范围

按组将一列转换为多列

在 R 中按组转置数据