R 计算比较参考数据集的重复列的平均值

R 计算比较参考数据集的重复列的平均值,r,dplyr,data.table,R,Dplyr,Data.table,我想通过与参考数据集进行比较来计算数据帧的平均值 在下面的示例中,df1是参考数据帧,其中df1$ID是df2的列名。我想计算对应df1$Ref中每个重复值的平均值df2 df1 <- data.frame("ID" = paste("R",1:7,sep = "_"), "Ref" = rep(c("A","B","C","D"),c(2,2,1,2))) df2 <- data.frame("G.Na" = paste("Neo",1:5,sep = "."), "R_1" =

我想通过与参考数据集进行比较来计算数据帧的平均值

在下面的示例中,df1是参考数据帧,其中df1$ID是df2的列名。我想计算对应df1$Ref中每个重复值的平均值df2

df1 <- data.frame("ID" = paste("R",1:7,sep = "_"), "Ref" = rep(c("A","B","C","D"),c(2,2,1,2)))

df2 <- data.frame("G.Na" = paste("Neo",1:5,sep = "."), "R_1" = 10:14, "R_2"= 1:5,
                  "R_3"= 2:6,"R_4"= 7:11, "R_5"= 0.2:0.6,"R_6"= 9:13,"R_7" = 23:27)


result <- data.frame("G.Na" = paste("Neo",1:5,sep = "."), "R_1" = 5.5:9.5, "R_3"= 4.5:8.5,
                  "R_5"= 0.2:0.6,"R_6"= 16:20)

df1假设
df1$ID
df2
中的列名顺序相同。我们可以使用
split.default
根据
df1$Ref
中的级别对列进行拆分,然后使用
sapply
为每组计算
rowMeans

cbind(df2[1], sapply(split.default(df2[-1], df1$Ref), rowMeans))

#  G.Na    A   B   C  D
#1 Neo.1 5.5 4.5 0.2 16
#2 Neo.2 6.5 5.5 0.2 17
#3 Neo.3 7.5 6.5 0.2 18
#4 Neo.4 8.5 7.5 0.2 19
#5 Neo.5 9.5 8.5 0.2 20
如果它们的顺序不相同,我们可能需要先对它们进行匹配

cbind(df2[1], sapply(split.default(df2[-1], 
              df1$Ref[match(names(df2)[-1], df1$ID)]), rowMeans))

假设
df1$ID
df2
中的列名顺序相同。我们可以使用
split.default
根据
df1$Ref
中的级别对列进行拆分,然后使用
sapply
为每组计算
rowMeans

cbind(df2[1], sapply(split.default(df2[-1], df1$Ref), rowMeans))

#  G.Na    A   B   C  D
#1 Neo.1 5.5 4.5 0.2 16
#2 Neo.2 6.5 5.5 0.2 17
#3 Neo.3 7.5 6.5 0.2 18
#4 Neo.4 8.5 7.5 0.2 19
#5 Neo.5 9.5 8.5 0.2 20
如果它们的顺序不相同,我们可能需要先对它们进行匹配

cbind(df2[1], sapply(split.default(df2[-1], 
              df1$Ref[match(names(df2)[-1], df1$ID)]), rowMeans))

我们可以使用
split
本身在
baser
中执行此操作。请注意,这也将采取任何顺序的列名

cbind(df2[1], sapply(split(df1$ID, df1$Ref),
           function(x) rowMeans(df2[as.character(x)])))
#   G.Na   A   B   C  D
#1 Neo.1 5.5 4.5 0.2 16
#2 Neo.2 6.5 5.5 0.2 17
#3 Neo.3 7.5 6.5 0.2 18
#4 Neo.4 8.5 7.5 0.2 19
#5 Neo.5 9.5 8.5 0.2 20

我们可以使用
split
本身在
baser
中执行此操作。请注意,这也将采取任何顺序的列名

cbind(df2[1], sapply(split(df1$ID, df1$Ref),
           function(x) rowMeans(df2[as.character(x)])))
#   G.Na   A   B   C  D
#1 Neo.1 5.5 4.5 0.2 16
#2 Neo.2 6.5 5.5 0.2 17
#3 Neo.3 7.5 6.5 0.2 18
#4 Neo.4 8.5 7.5 0.2 19
#5 Neo.5 9.5 8.5 0.2 20

不知道split.default函数。已解决。不知道split.default函数。解决了的。