我在SAS工作了几年,但随着我作为一名拥有免费执照的学生的时间即将结束,我想学习R。
是否可以转换数据集,使单个ID的所有观测都在同一条线上?(我每一个人都有2-8个观测,但它们目前是垂直排列的,而不是水平排列的。)在SAS中,根据我的分析目标,我一直在使用PROC和。
示例:
ID date timeframe fruit_amt veg_amt <br/>
4352 05/23/2013 before 0.25 0.75 <br/>
5002 05/24/2014 after 0.06 0.25 <br/>
4352 04/16/2014 after 0 0 <br/>
4352 05/23/2013 after 0.06 0.25 <br/>
5002 05/24/2014 before 0.75 0.25 <br/>所需:
ID B_fr05/23/2013 B_veg05/23/2013 A_fr05/23/2013 A_veg05/23/2013 B_fr05/24/2014 B_veg05/24/2014 (etc) <br/>
4352 0.25 0.75 0.06 0.25 . . <br/>
5002 . . . . 0.75 0.25 <br/>发布于 2014-12-23 18:11:24
您可以将reshape2包用于此任务。
首先,使用melt将数据转换为长格式:
library(reshape2)
dat_m <- melt(dat, measure.vars = c("fruit_amt", "veg_amt"))其中dat是数据框架的名称。
第二,采用宽格式:
dcast(dat_m, ID ~ timeframe + variable + date)结果:
ID after_fruit_amt_04/16/2014 after_fruit_amt_05/23/2013 after_fruit_amt_05/24/2014 after_veg_amt_04/16/2014
1 4352 0 0.06 NA 0
2 5002 NA NA 0.06 NA
after_veg_amt_05/23/2013 after_veg_amt_05/24/2014 before_fruit_amt_05/23/2013 before_fruit_amt_05/24/2014
1 0.25 NA 0.25 NA
2 NA 0.25 NA 0.75
before_veg_amt_05/23/2013 before_veg_amt_05/24/2014
1 0.75 NA
2 NA 0.25
> 发布于 2014-12-22 23:55:11
从包'dplyr‘中尝试’Data.frame.name,ID‘函数
https://datascience.stackexchange.com/questions/3742
复制相似问题