2017-05-31 15 views
2

我知道這個問題有可能已經被問過,但我找不到我在多個措施的存在與瓦爾熔化面臨的具體問題的實例。 我有這樣的數據表。融化與多個測量的方差分析型數據集瓦爾和類別中的R

library(data.table) 
set.seed(234) 
DT<-data.table(item=1:3,phase=c("pre-test","test","follow up"), 
       control_RT=sample(400:600,3),control_ecc=sample(100:200,3), 
       oa_RT=sample(500:700,3),oa_ecc=sample(200:250,3),ya_RT=sample(450:550,3),ya_ecc=sample(230:260,3)) 

所有我需要做的是按類別把兩個單獨的列變量RT和ECC,並添加的類別指定列:

item phase  RT ecc Category 
    1 pre-test 549 178 control 
    2 test  556 106 control 
    3 follow up 403 163 control 
    1 pre-test 686 214 oa 
    2 test  643 227 oa 
    3 follow up 684 226 oa 
    1 pre-test 508 243 ya 
    2 test  550 239 ya 
    3 follow up 450 251 ya 

我試圖用reshapevarying功能,但沒有成功。有什麼建議?

+0

看看tidyr功能聚集 –

回答

2

您可以使用tidyr


library(tidyr) 

DT %>% 
    gather("key", "value", -item, -phase) %>% 
    separate(key, c("Category", "key")) %>% 
    spread(key, value) 

#> item  phase Category ecc RT 
#> 1 1 pre-test control 178 549 
#> 2 1 pre-test  oa 214 686 
#> 3 1 pre-test  ya 243 508 
#> 4 2  test control 106 556 
#> 5 2  test  oa 227 643 
#> 6 2  test  ya 239 550 
#> 7 3 follow up control 163 403 
#> 8 3 follow up  oa 226 684 
#> 9 3 follow up  ya 251 450 
+0

謝謝你,有沒有類似的功能data.table ? –

+0

我不知道 - 我從來不使用'data.table',對不起 – austensen

2

由於它是一個data.table,我們可以使用data.table方法有效

library(data.table) 
dcast(melt(DT, id.var = c('item', 'phase'))[, c('Category', 'key') := 
     tstrsplit(variable, '_')], item + phase + Category ~key, value.var = 'value') 
# item  phase Category RT ecc 
#1: 1 pre-test control 549 178 
#2: 1 pre-test  oa 686 214 
#3: 1 pre-test  ya 508 243 
#4: 2  test control 556 106 
#5: 2  test  oa 643 227 
#6: 2  test  ya 550 239 
#7: 3 follow up control 403 163 
#8: 3 follow up  oa 684 226 
#9: 3 follow up  ya 450 251 
+1

非常感謝,像往常一樣! –