2014-06-27 24 views
0

我有一個數據幀,看起來像這樣:與列值變換的數據幀作爲列名

   variable    Name Description value SMTS 
GTEX-N7MS-0007-SM-2D7W1 ENSG00000223972.4  DDX11L1  0 Blood 
GTEX-N7MS-0007-SM-2D7W1 ENSG00000227232.4  WASH7P 158 Blood 
GTEX-N7MS-0008-SM-4E3JI ENSG00000223972.4  DDX11L1  0 Skin 
GTEX-N7MS-0008-SM-4E3JI ENSG00000227232.4  WASH7P 166 Skin 
GTEX-N7MS-0011-R10A-SM-2HMJK ENSG00000223972.4  DDX11L1  0 Brain 
GTEX-N7MS-0011-R10A-SM-2HMJK ENSG00000227232.4  WASH7P 209 Brain 

我想去改造它,從而在Description列中的值將成爲列名,並在值在value列成爲列值:

   variable DDX11L1 WASH7P SMTS 
GTEX-N7MS-0007-SM-2D7W1   0  158 Blood 
GTEX-N7MS-0008-SM-4E3JI   0  166 Skin 
GTEX-N7MS-0011-R10A-SM-2HMJK 0  209 Brain 

我試着使用轉換(如dcast(最終值〜名稱)和其他組合也是如此),但我不希望任何函數(如平均,總和等)申請轉換,它返回我的長度e物體。我只是想要的值。任何建議,將不勝感激。

+0

檢查出來的'reshape2'包並閱讀:[在寬和長之間轉換數據](http://www.cookbook-r.com/Manipulating_data/Converting_data_betw een_wide_and_long_format /) – rrs

+0

我不明白這一點。每次我發佈一個問題,爲什麼有人會投票呢?我檢查了reshape2軟件包,並且還嘗試了使用相當多的組合進行投射和播放,但它不適合我。我確實提到我嘗試使用dcast。 –

回答

2

這似乎給您正在尋找的結果:

library(reshape2) 
dcast(mydf, variable + SMTS ~ Description, value.var="value") 
#      variable SMTS DDX11L1 WASH7P 
# 1  GTEX-N7MS-0007-SM-2D7W1 Blood  0 158 
# 2  GTEX-N7MS-0008-SM-4E3JI Skin  0 166 
# 3 GTEX-N7MS-0011-R10A-SM-2HMJK Brain  0 209 
+0

感謝您的幫助! –

2

嘗試:

library(dplyr) 
library(tidyr) 

如果dat是數據集

dat%>% select(-Name) %>% spread(Description, value) 
#       variable SMTS DDX11L1 WASH7P 
# 1  GTEX-N7MS-0007-SM-2D7W1 Blood  0 158 
# 2  GTEX-N7MS-0008-SM-4E3JI Skin  0 166 
# 3 GTEX-N7MS-0011-R10A-SM-2HMJK Brain  0 209 
相關問題