如何解决将行与多列数据R合并为一行
我有一个测量体重前后状况的数据集。我试图将具有相似ID的行合并为一行,并创建另外两列以显示每个ID之前和之后的结果。
原始表
ID Sex Race TIME SH PRE_WEIGHT POST_WEIGHT 1 FEMALE White POST Poor 168 152 1 FEMALE White PRE Good 168 152 2 MALE Hispanic POST Very Poor 157 143 2 MALE Hispanic PRE Poor 157 143 3 FEMALE Black POST Good 129 118 3 FEMALE Black PRE Satisfactory 129 118
结果应如下所示:
ID Sex Race TIME SH PRE_WEIGHT POST_WEIGHT TIME_PRE TIME_POST SH_PRE SH_POST 1 FEMALE White POST Poor 168 152 POST PRE Poor Good 2 MALE Hispanic POST Very Poor 157 143 POST PRE Very Poor Poor 3 FEMALE Black POST Good 129 118 POST PRE Good Satisfactor
我试图用很慢的重塑来完成它,但是没有用。我也无法用提迪尔重塑桌子。
希望任何人都可以帮助我。
解决方法
带有data.table
library(data.table)
dcast(setDT(df1),ID + Sex + Race + PRE_WEIGHT +
POST_WEIGHT ~ TIME,value.var = 'SH')
-输出
# ID Sex Race PRE_WEIGHT POST_WEIGHT POST PRE
#1: 1 FEMALE White 168 152 Poor Good
2#: 2 MALE Hispanic 157 143 Very Poor Poor
3#: 3 FEMALE Black 129 118 Good Satisfactory
,
一个简单的基本R选项可能正在使用reshape
,例如
reshape(
df,direction = "wide",idvar = c("ID","Sex","Race"),timevar = "TIME"
)
给出
ID Sex Race SH.POST PRE_WEIGHT.POST POST_WEIGHT.POST SH.PRE
1 1 FEMALE White Poor 168 152 Good
3 2 MALE Hispanic Very Poor 157 143 Poor
5 3 FEMALE Black Good 129 118 Satisfactory
PRE_WEIGHT.PRE POST_WEIGHT.PRE
1 168 152
3 157 143
5 129 118
数据
> dput(df)
structure(list(ID = c(1L,1L,2L,3L,3L),Sex = c("FEMALE","FEMALE","MALE","FEMALE"),Race = c("White","White","Hispanic","Black","Black"),TIME = c("POST","PRE","POST","PRE"),SH = c("Poor","Good","Very Poor","Poor","Satisfactory"),PRE_WEIGHT = c(168L,168L,157L,129L,129L),POST_WEIGHT = c(152L,152L,143L,118L,118L)),class = "data.frame",row.names = c(NA,-6L
))
,
正如@Duck提到的,您可以做到
library(dplyr)
library(tidyr)
df3 %>%
group_by(ID) %>%
pivot_wider(names_from = TIME,values_from = SH,names_prefix = "SH_")
#> # A tibble: 3 x 7
#> # Groups: ID [3]
#> ID Sex Race PRE_WEIGHT POST_WEIGHT SH_POST SH_PRE
#> <dbl> <chr> <chr> <dbl> <dbl> <chr> <chr>
#> 1 1 FEMALE White 168 152 Poor Good
#> 2 2 MALE Hispanic 157 143 Very Poor Poor
#> 3 3 FEMALE Black 129 118 Good Satisfactory
您的数据
df3 <- readr::read_table("
ID Sex Race TIME SH PRE_WEIGHT POST_WEIGHT
1 FEMALE White POST Poor 168 152
1 FEMALE White PRE Good 168 152
2 MALE Hispanic POST Very Poor 157 143
2 MALE Hispanic PRE Poor 157 143
3 FEMALE Black POST Good 129 118
3 FEMALE Black PRE Satisfactory 129 118")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。