Reshaping a data frame with more than one measure variable

前端 未结 3 1870
独厮守ぢ
独厮守ぢ 2020-12-14 17:33

I\'m using a data frame similar to this one:

df<-data.frame(student=c(rep(1,5),rep(2,5)), month=c(1:5,1:5),  
      quiz1p1=seq(20,20.9,0.1),quiz1p2=seq(3         


        
3条回答
  •  独厮守ぢ
    2020-12-14 18:20

    Here's how you could do this with reshape(), from base R:

    df2 <- reshape(df, direction="long",
                   idvar = 1:2, varying = list(c(3,5), c(4,6)),
                   v.names = c("p1", "p2"), times = c("quiz1", "quiz2"))
    
    ## Checking the output    
    rbind(head(df2, 3), tail(df2, 3))
    #           student month  time   p1   p2
    # 1.1.quiz1       1     1 quiz1 20.0 30.0
    # 1.2.quiz1       1     2 quiz1 20.1 30.1
    # 1.3.quiz1       1     3 quiz1 20.2 30.2
    # 2.3.quiz2       2     3 quiz2 80.7 90.7
    # 2.4.quiz2       2     4 quiz2 80.8 90.8
    # 2.5.quiz2       2     5 quiz2 80.9 90.9
    

    You can also use column names (instead of column numbers) for idvar and varying. It's more verbose, but seems like better practice to me:

    ## The same operation as above, using just column *names*
    df2 <- reshape(df, direction="long", idvar=c("student", "month"),
                   varying = list(c("quiz1p1", "quiz2p1"), 
                                  c("quiz1p2", "quiz2p2")), 
                   v.names = c("p1", "p2"), times = c("quiz1", "quiz2"))
    

提交回复
热议问题