随着时间的推移逐行比较 2 个数据帧的分析
Analysis over time comparing 2 dataframes row by row
This is a small portion of the dataframe I am working with for reference.我正在使用 R 中的数据框 (MG53_HanLab),其中有一个时间列,其中有几列名称为 "MG53",几列带有名称 "F2" 和几个 "Iono"。我想比较每个时间点每个组的平均值。我知道我必须对数据进行子集化并尝试做
control <- MG53_HanLab[c(2:11)]
F2 <- MG53_HanLab[c(12:23)]
iono <- MG53_HanLab[c(24:33)]
创建了 3 个新数据框。
我的问题是:如何逐行比较两个数据帧以查看每个数据帧的均值是否存在差异table?
您可以使用 data.table
包,将一些数据从列翻转到行然后再翻转回来。
#import library
library(data.table)
#create example data
time<-seq(1.0,6.0,.5)
A_1<-runif(11)
A_2<-runif(11)
B_1_1<-runif(11)
B_1_2<-runif(11)
B_2<-runif(11)
#instantiate data table from example data
dt <-data.table(time,A_1,A_2,B_1_1,B_1_2,B_2)
#flip all columns with underscores in name into rows using regular expression
dt.m = melt(dt,id.vars=c("time"), measure.vars=grep('_',colnames(dt)))
#remove characters after '_' to homogenize column groups
dt.m[,variable:=sub("_.*","",variable)]
#calculate the mean grouped by time and column groups
dt.mean<-dt.m[,lapply(.SD,mean),by=.(time,variable)]
#flip rows back to columns
dcast(dt.mean,time~variable,value.var = "value")
rowMeans
感觉就像@Chi Pak 建议的那样简单。
#create example data
time<-seq(1.0,6.0,.5)
A_1<-runif(11)
A_2<-runif(11)
B_1_1<-runif(11)
B_1_2<-runif(11)
B_2<-runif(11)
#create data frame
df<-data.frame(time,A_1,A_2,B_1_1,B_1_2,B_2)
#subset column groups into individual data frames using regular expression
df.a<-df[,grep('A_',colnames(df))]
#calculate rowMeans
a.mean<-rowMeans(df.a)
#repeat for other column groups
df.b<-df[,grep('B_',colnames(df))]
b.mean<-rowMeans(df.b)
#recombine to view side by side
df.mean<-data.frame(a.mean,b.mean)
This is a small portion of the dataframe I am working with for reference.我正在使用 R 中的数据框 (MG53_HanLab),其中有一个时间列,其中有几列名称为 "MG53",几列带有名称 "F2" 和几个 "Iono"。我想比较每个时间点每个组的平均值。我知道我必须对数据进行子集化并尝试做
control <- MG53_HanLab[c(2:11)]
F2 <- MG53_HanLab[c(12:23)]
iono <- MG53_HanLab[c(24:33)]
创建了 3 个新数据框。
我的问题是:如何逐行比较两个数据帧以查看每个数据帧的均值是否存在差异table?
您可以使用 data.table
包,将一些数据从列翻转到行然后再翻转回来。
#import library
library(data.table)
#create example data
time<-seq(1.0,6.0,.5)
A_1<-runif(11)
A_2<-runif(11)
B_1_1<-runif(11)
B_1_2<-runif(11)
B_2<-runif(11)
#instantiate data table from example data
dt <-data.table(time,A_1,A_2,B_1_1,B_1_2,B_2)
#flip all columns with underscores in name into rows using regular expression
dt.m = melt(dt,id.vars=c("time"), measure.vars=grep('_',colnames(dt)))
#remove characters after '_' to homogenize column groups
dt.m[,variable:=sub("_.*","",variable)]
#calculate the mean grouped by time and column groups
dt.mean<-dt.m[,lapply(.SD,mean),by=.(time,variable)]
#flip rows back to columns
dcast(dt.mean,time~variable,value.var = "value")
rowMeans
感觉就像@Chi Pak 建议的那样简单。
#create example data
time<-seq(1.0,6.0,.5)
A_1<-runif(11)
A_2<-runif(11)
B_1_1<-runif(11)
B_1_2<-runif(11)
B_2<-runif(11)
#create data frame
df<-data.frame(time,A_1,A_2,B_1_1,B_1_2,B_2)
#subset column groups into individual data frames using regular expression
df.a<-df[,grep('A_',colnames(df))]
#calculate rowMeans
a.mean<-rowMeans(df.a)
#repeat for other column groups
df.b<-df[,grep('B_',colnames(df))]
b.mean<-rowMeans(df.b)
#recombine to view side by side
df.mean<-data.frame(a.mean,b.mean)