2013-07-09 4 views
0

У меня есть кадр данных следующим образом:R: манипуляция кадр данных

Name W1xH1 W2xH2 W3xH3 W1xH2 
A   0  10  20  10 
B   10  100 200  20 
C   0  0  10  40 

Но я хочу, чтобы получить кадр данных следующим образом:

 H1 H2 H3 
W1 10 70  0 
W2 0 110  0 
W3 0  0 230 

Может кто-нибудь сказать мне, как это сделать? Причина, по которой я хочу это, - это создать тепловую карту на W * и H *. Любая помощь будет очень оценена.

Спасибо.

+0

Ваш пример вывода представляется неверным. Пожалуйста, подтвердите. – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto Спасибо, что указали это. –

ответ

2

Предполагая, что ваш data.frame называется «mydf», используйте stack и xtabs.

temp <- stack(mydf[-1]) 
temp1 <- data.frame(temp, 
        do.call(rbind, 
          strsplit(as.character(temp$ind), "x"))) 
xtabs(values ~ X1 + X2, temp1) 
#  X2 
# X1 H1 H2 H3 
# W1 10 70 0 
# W2 0 110 0 
# W3 0 0 230 

Здесь "mydf" определяется как:

mydf <- structure(list(Name = c("A", "B", "C"), W1xH1 = c(0L, 10L, 0L), 
    W2xH2 = c(10L, 100L, 0L), W3xH3 = c(20L, 200L, 10L), W1xH2 = c(10L, 20L, 40L)), 
    .Names = c("Name", "W1xH1", "W2xH2", "W3xH3", "W1xH2"), 
    class = "data.frame", row.names = c(NA, -3L)) 
Смежные вопросы