Как переформатировать таблицу в R?

Я загрузил таблицу следующим образом:

    V1  V2   V3
  pat1   1    2
  pat1   3    1
  pat1   4    2
  pat2   3    3
  pat3   1    4
  pat3   2    3

и мне нужно отформатировать его примерно так: V1 указывает строку, V2 указывает столбец и значения в V3:

         1    2    3    4
 pat1    2    0    1    2
 pat2    0    0    3    0
 pat3    4    3    0    0

Обратите внимание, что pat1, pat2 и pat3 имеют разное количество наблюдений, и что пропущенные значения должны быть заполнены 0.


person je_b    schedule 06.03.2015    source источник


Ответы (2)


Используя dcast из reshape2 :

library(reshape2)
dcast(dat,V1~V2,fill=0)

    V1 1 2 3 4
1 pat1 2 0 1 2
2 pat2 0 0 3 0
3 pat3 4 3 0 0

Где это:

dat <- read.table(text='V1  V2   V3
  pat1   1    2
  pat1   3    1
  pat1   4    2
  pat2   3    3
  pat3   1    4
  pat3   2    3',header=TRUE)
person agstudy    schedule 06.03.2015

Альтернативой базовой R является использование xtabs:

xtabs(V3 ~ V1 + V2, mydf)
#       V2
# V1     1 2 3 4
#   pat1 2 0 1 2
#   pat2 0 0 3 0
#   pat3 4 3 0 0

or reshape:

reshape(mydf, direction = "wide", idvar = "V1", timevar = "V2")
#     V1 V3.1 V3.3 V3.4 V3.2
# 1 pat1    2    1    2   NA
# 4 pat2   NA    3   NA   NA
# 5 pat3    4   NA   NA    3
person A5C1D2H2I1M1N2O1R2T1    schedule 06.03.2015
comment
Отличный пример полезных функций базового пакета. - person Alex A.; 06.03.2015