首页 文章

根据R中另一个数据帧中的元数据信息组合Dataframe列

提问于
浏览
2

我的数据集在概念上与此问题中的数据集类似:Hierarchical indexing in R dataframe但不是这一个:R: Combine columns based on different information in another column of a dataframe

我想根据另一个数据帧中列的元数据信息,通过对它们进行求和来组合(或重新组合)表中的列 .

这是我的数据集的一个示例

organisms x1 x2 x3 x4 y1 y2 y3 y4
       cat   1  1  5  0  1  0  1  3
       dog   2  2  4  0  2  3  0  1
     mouse   3  0  3  2  3  2  1  0
      bird   4  3  2  1  2  7  2  0

这就是我想要展示它的方式

organisms Extreme NotExtreme
cat       7 5
dog       8 6
mouse     8 6
bird      10 11

或者作为

organisms XLow XHigh YLow YHigh
cat         6    1     2     2    
dog         6    2     2     4
mouse       6    2     4     2
bird        6    4     4     7

这是加载我的数据集的代码

metadata <- data.frame(sample = c("x1","x2","x3","x4","y1","y2","y3","y4"), treatment = c(rep("Xtreme",4),rep("NotExtreme",4)),dosage=c(rep(c("Xlow","Xhigh"),2),rep(c("Ylow","YHigh"),2)))
mydata <- data.frame(x1 = c(1,2,3,4), x2 = c(1,2,0,3), x3=c(5,4,3,2),x4=c(0,0,2,1),y1=c(1,2,3,2),y2=c(0,3,2,7),y3=c(1,0,1,2),y4=c(3,1,0,0))
rownames(mydata)<- c("cat","dog","mouse","bird")

是否有一个直接的一个或两个班轮解决方案或我必须为此编写功能?我研究了融合函数和dplyr包,但这不是我想要的,因为我的数据已经包含在两个独立的data.frames中 . 这是一个依赖于列的操作 .

Hierarchical indexing in R dataframe问题在某种程度上类似于我的问题,但我重新呈现数据,而不是将层次结构保留在同一数据框中 . 但是列之间的层次关系仍然存在 .

任何有关如何处理优雅解决方案的见解都将非常感激 .

1 回答

  • 0

    可能有更优雅的方法,但您可以通过基于元数据df中的值列表进行子集化,然后将这些行值相加来实现此目的...

    Exdf<-data.frame(Extreme=rowSums(mydata[,(colnames(mydata) %in% subset(metadata, treatment=="Xtreme")$sample==T)]),
                 NotExtreme=rowSums(mydata[,(colnames(mydata) %in% subset(metadata, treatment=="NotExtreme")$sample==T)]))
    LH<-data.frame(XLow=rowSums(mydata[,(colnames(mydata) %in% subset(metadata, dosage=="Xlow")$sample==T)]),
                 XHigh=rowSums(mydata[,(colnames(mydata) %in% subset(metadata, dosage=="Xhigh")$sample==T)]),
               YLow=rowSums(mydata[,(colnames(mydata) %in% subset(metadata, dosage=="Ylow")$sample==T)]),
               YHigh=rowSums(mydata[,(colnames(mydata) %in% subset(metadata, dosage=="Yhigh")$sample==T)]))
    

相关问题