将长格式转换为宽格式 [英] Converting long to wide format
本文介绍了将长格式转换为宽格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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。
推荐答案
aggregate
Thenreshape
(使用您的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屋!
查看全文