【问题标题】:dcast and reorder data of a dataframedcast 和重新排序数据帧的数据
【发布时间】:2020-07-06 11:15:00
【问题描述】:

我有以下数据框:

MOUSE_GENOTYPE  GENE_ID INFLAMMATION_TYPE   Fold gene expression

WT  Arg1                  microglia        0.02581
WT Arg1                  microglia        0.06783
KO  Arg1                  microglia        0.01477
KO Arg1               microglia        0.01787            
WT  Aspg                  PAN-reactive     0.01856
WT Aspg               PAN-reactive     0.08373
KO  Aspg                  PAN-reactive     0.0199
KO Aspg               PAN-reactive     0.09839
WT  Emp1                  A2-specific      0.03525
WT Emp1               A2-specific      0.02738
KO  Emp1                  A2-specific      0.01627
KO Emp1               A2-specific      0.02832

我想通过聚合平均值来重塑它,如下所示:

                Arg1        Aspg                Emp1
MOUSE_GENOTYPE  microglia   PAN-reactive        A2-specific
WT              0.02581      0.0185             0.00691
KO              0.01477      0.0199             0.00631

我想通过变量 INFLAMMATION_TYPE 对列重新排序,这样我就可以先获得 PAN 反应性列,然后是小胶质细胞,然后是 A2 特定的列。

                Aspg         Arg1                Emp1
MOUSE_GENOTYPE  PAN-reactive microglia          A2-specific
WT               0.0185      0.02581            0.00691
KO               0.0199      0.0147             0.00631

我试过dcast功能:

results_reshaped <- dcast(results, 
                          MOUSE_GENOTYPE  ~ GENE_ID + INFLAMMATION_TYPE,
                          fun.aggregate = mean)

但 GENE_ID 和 INFLAMMATION TYPE 组合在一个变量中:

                         Arg1_ microglia     Aspg_ PAN-reactive            Emp1_ A2-specific
MOUSE_GENOTYPE  
WT                              0.02581  0.01856                                      0.00691
KO                              0.01477  0.0199                                      0.00631

我想将它们保存在单独的列中并重新排序以获得此信息。有什么建议吗?

谢谢! P

【问题讨论】:

  • 请使用dput()创建您的示例数据...

标签: r reshape dcast


【解决方案1】:

您可以将数据框的名称格式化为 next 以达到您想要的类似结构:

#Format names
vecoriginal <- names(results_reshaped)
vecnames <- names(results_reshaped)[-1]
v1 <- c("",gsub("_.*", "",vecnames))
v2 <- c(vecoriginal[1],gsub(".*_","",vecoriginal[-1]))
#Assign names
names(results_reshaped)<-v1
#Create empty dataframe
empty <- as.data.frame(t(data.frame(v1,v2,stringsAsFactors = F)),stringsAsFactors = F)
names(empty)<-names(results_reshaped)
#Bind elements
DF <- rbind(empty,results_reshaped)
DF <- DF[-1,]
rownames(DF)<-NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多