2017-02-07 3 views
2

に別のデータフレームにメタデータ情報に基づいてデータフレームの列を組み合わせる:Hierarchical indexing in R dataframeではなく、この1:私はコンバイン(または再編成)したいR: Combine columns based on different information in another column of a dataframeここに私のデータセットは、この問題の1の概念と類似しているR

列他のデータフレームの列に関するメタデータ情報に基づいて、それらを合計することによって、私のテーブルに表示されます。ここで

は私のデータセット

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 

として、それを表示したいI一つの方法は、ここにある方法ですデータセットをロードするコード

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") 

ストレートな1つまたは2つのライナーソリューションがありますか、それともそのための関数を記述する必要がありますか?私は溶融関数とdplyrパッケージを調べましたが、私のデータはすでに2つの別々のデータフレームに含まれているので、これは私がここで必要なものではありません。これは列に依存する操作です。

Hierarchical indexing in R dataframe質問はどういうわけか鉱山に似ていますが、私は同じデータフレームで階層を維持しないでデータの再提示を行います。しかし、列間の階層関係は残っています。

どのように優雅なソリューションにアプローチするかについての洞察は非常に高く評価されます。

答えて

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)])) 
関連する問題