根据R中另一个数据框中的元数据信息组合数据框列
Combine Dataframe columns based on metadata information in another dataframe in R
我这里的数据集在概念上与这个问题中的数据集相似:Hierarchical indexing in R dataframe but not this one: R: Combine columns based on different information in another column of a dataframe
我想根据另一个数据框中列的元数据信息,通过对它们求和来组合(或重新组合)我的 table 中的列。
这是我的数据集的示例
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")
是否有直接的一两个线性解决方案,或者我是否必须为此编写一个函数?我查看了 melt 函数和 dplyr 包,但这不是我想要的,因为我的数据已经包含在两个单独的 data.frames 中。这是一个依赖于列的操作。
Hierarchical indexing in R dataframe 问题在某种程度上与我的类似,但我对数据进行了重新表示,而不是将层次结构保留在同一数据框中。但是列之间的层次关系仍然存在。
任何有关如何实现优雅解决方案的见解都将不胜感激。
可能有更优雅的方法,但您可以通过基于元数据 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)]))
我这里的数据集在概念上与这个问题中的数据集相似:Hierarchical indexing in R dataframe but not this one: R: Combine columns based on different information in another column of a dataframe
我想根据另一个数据框中列的元数据信息,通过对它们求和来组合(或重新组合)我的 table 中的列。
这是我的数据集的示例
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")
是否有直接的一两个线性解决方案,或者我是否必须为此编写一个函数?我查看了 melt 函数和 dplyr 包,但这不是我想要的,因为我的数据已经包含在两个单独的 data.frames 中。这是一个依赖于列的操作。
Hierarchical indexing in R dataframe 问题在某种程度上与我的类似,但我对数据进行了重新表示,而不是将层次结构保留在同一数据框中。但是列之间的层次关系仍然存在。
任何有关如何实现优雅解决方案的见解都将不胜感激。
可能有更优雅的方法,但您可以通过基于元数据 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)]))