2015-03-06 2 views
2

я загрузил таблицу, как это:Как переформатировать таблицу в 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.

ответ

3

Использование 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) 
+0

отлично работает, спасибо! –

4

Основание 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 

или 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 
+0

Отличный пример полезных функций базового пакета. –