使用列值作为列名转换数据框

时间:2014-06-27 15:44:52

标签: r casting dataframe reshape melt

我有一个如下所示的数据框:

               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(final,value~Name)和其他组合)但是由于我不想要任何函数(如mean,sum等)来申请转换,它会返回我的长度的对象。我只想要这些值。任何建议将不胜感激。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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