在 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)