2014-06-27 23 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 
相关问题