在R中重塑从长到半的数据

时间:2011-06-13 17:41:19

标签: r dataframe reshape

我有数据,其中每个参与者对9个对象中的每一个做出3个判断(27个判断)。 9个物体在3x3设计中变化(在受试者内),因此有2个因素。

我从ID + 27数据列开始,我需要

  • ID
  • 2个因素列:绩效,情境
  • 3个值列:Success,ProbAdmit,Admit

我已经阅读了reshape()和melt()以及cast()的手册,但还没有弄清楚我需要做些什么来实现它。以下是我目前可以查看实际数据的进度。

scsc3 <- read.csv("http://swift.cbdr.cmu.edu/data/SCSC3-2006-10-10.csv")
library(reshape)
scsc3.long <- melt(scsc3,id="Participant")
scsc3.long <- cbind(scsc3.long,colsplit(scsc3.long$variable,split="[.]",names=c("Item","Candidate","Performance","Situation")))
scsc3.long$variable <- NULL
scsc3.long$Candidate <- NULL

上面的代码告诉我:

Participant  value  Item      Performance  Situation
4001         5.0    Success   GL           IL
4001         60     ProbAdmit GL           IL
4001         1      Admit     GL           IL
4002         ....

我需要的是像这样的数据框

Participant Performance  Situation SuccessValue ProbAdmitValue AdmitValue
4001        GL           IL        5.0          60             1
...

谢谢!

1 个答案:

答案 0 :(得分:9)

试试这个:

require(reshape2)
> dcast(scsc3.long, 
        Participant + Performance + Situation ~ Item, 
        value_var = 'value' )

  Participant Performance Situation Admit ProbAdmit Success
1        4001          GH        IH     1       100       7
2        4001          GH        IL     1        50       5
3        4001          GH        IM     1        60       5
4        4001          GL        IH     0        40       3
5        4001          GL        IL     0         0       2
6        4001          GL        IM     0        40       4
...

考虑dcast正在做什么的一种方法是:将数据框“转换”为宽格式 行是Participant + Performance + SituationItem的组合 列是Admit, ProbAdmit, Success的不同可能值,即value_var = 'value'value表示应为每个“行列”组合显示{{1}}列的条目。