将长格式转换为宽格式 [英] Converting long to wide format

查看:11
本文介绍了将长格式转换为宽格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

id <- c(1:8,1:8)
age1 <- c(7.5,6.7,8.6,9.5,8.7,6.3,9,5)
age2 <- age1 + round(runif(1,1,3),1)
age <- c(age1, age2)

tanner <-  sample(1:2, 16,replace=T)

df <- data.frame(id,age,tanner)


    id  age tanner
1   1  7.5      2
2   2  6.7      1
3   3  8.6      2
4   4  9.5      2
5   5  8.7      1
6   6  6.3      1
7   7  9.0      1
8   8  5.0      1
9   1 10.0      1
10  2  9.2      1
11  3 11.1      1
12  4 12.0      2
13  5 11.2      2
14  6  8.8      2
15  7 11.5      1
16  8  7.5      1
上面是一个样例数据框。我想将其转换为以下格式。

id   age at tanner=1   age at tanner=2     
1          10               7.5                               
2          6.7              NA
3          11.1             8.6
4           NA              9.5   
...

如果两个年龄的Tanner记录相同,我希望它保持较年轻的年龄。

例如

id  age  tanner
2    6.7   1
2    9.2   1

在这种情况下,将在新数据集中保留id=2的6.7。

推荐答案

aggregateThenreshape(使用您的df而不是您的代码的复制和粘贴版本,这不匹配):

reshape(
  aggregate(age ~ ., data=df, FUN=min),
  idvar="id", timevar="tanner", direction="wide"
)

#   id age.1 age.2
#1   1  10.0   7.5
#2   2   6.7    NA
#3   3  11.1   8.6
#4   5   8.7  11.2
#5   6   6.3   8.8
#6   7   9.0    NA
#7   8   5.0    NA
#10  4    NA   9.5

这篇关于将长格式转换为宽格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆