R 基于一列条件求数据帧中两行的平均值

R 基于一列条件求数据帧中两行的平均值,r,dataframe,subset,apply,mean,R,Dataframe,Subset,Apply,Mean,我有以下示例数据框: df<-data.frame(A=c(rep(1:4,4)),B=runif(16,min=0,max=16),c=rnorm(16, mean=6,sd=2)) 我将编写一个折叠函数: collapse_df <- function(mydf, column, omit, pair, FUN) { ind <- which(mydf[,column] %in% pair[1]) ind2 <- mydf[,column] %in% pai

我有以下示例数据框:

df<-data.frame(A=c(rep(1:4,4)),B=runif(16,min=0,max=16),c=rnorm(16, mean=6,sd=2))

我将编写一个折叠函数:

collapse_df <- function(mydf, column, omit, pair, FUN) {
  ind <- which(mydf[,column] %in% pair[1])
  ind2 <- mydf[,column] %in% pair[-1]
  m <- mapply(function(x,y) lapply(mydf[x:y,!names(mydf) %in% omit], FUN), ind, ind+1L)
  mydf[ind,] <- cbind.data.frame(mydf[ind,omit], t(m))
  mydf[!ind2,]
}

collapse_df(df, "A", pair=2:3, FUN=mean)
#      A         B         c
# 1  1.0  1.060170  4.797753
# 2  2.5  9.577249  6.635214
# 4  4.0  5.612720  3.413631
# 5  1.0  1.734932 10.487560
# 6  2.5  9.577249  6.635214
# 8  4.0  6.529387  5.760596
# 9  1.0  2.517647  5.469165
# 10 2.5  9.577249  6.635214
# 12 4.0  4.243273  6.493916
# 13 1.0 10.118011  4.431953
# 14 2.5  9.577249  6.635214
# 16 4.0  1.563981  5.047428

我将编写一个折叠函数:

collapse_df <- function(mydf, column, omit, pair, FUN) {
  ind <- which(mydf[,column] %in% pair[1])
  ind2 <- mydf[,column] %in% pair[-1]
  m <- mapply(function(x,y) lapply(mydf[x:y,!names(mydf) %in% omit], FUN), ind, ind+1L)
  mydf[ind,] <- cbind.data.frame(mydf[ind,omit], t(m))
  mydf[!ind2,]
}

collapse_df(df, "A", pair=2:3, FUN=mean)
#      A         B         c
# 1  1.0  1.060170  4.797753
# 2  2.5  9.577249  6.635214
# 4  4.0  5.612720  3.413631
# 5  1.0  1.734932 10.487560
# 6  2.5  9.577249  6.635214
# 8  4.0  6.529387  5.760596
# 9  1.0  2.517647  5.469165
# 10 2.5  9.577249  6.635214
# 12 4.0  4.243273  6.493916
# 13 1.0 10.118011  4.431953
# 14 2.5  9.577249  6.635214
# 16 4.0  1.563981  5.047428


B
C
的行会发生什么情况?@akash87 B和C将在A的条件下取平均值。您能说明您想要的输出吗?您是如何计算例如
df[2,B]
11.694196
?我不清楚。@m0h3n。我使用计算器,只是在数据框中排序。我没有真正计算其他人的实际值。\n
B
C
的行会发生什么情况?@akash87 B和C将在A的条件下求平均值。你能说明你想要的输出吗?你是如何计算的,例如
df[2,B]
,它是
11.694196
?我不清楚。@m0h3n。我使用计算器,只是在数据框中排序。我没有真正计算其他人的实际价值。\n谢谢。我有13个变量,比如A、B、C,我如何继续上面的解决方案?您是否仍在检查
A列中的
2
3
?@Pierre Lafortune是的。但是我的实际值是
400
500
,而不是
2
3
。我想这不是问题。不,不应该。你有没有试过这个函数?你是不是在为每一组寻找一个成对的平均值?我的函数只能找到总体平均值。谢谢。我有13个变量,比如A、B、C,我如何继续上面的解决方案?您是否仍在检查
A列中的
2
3
?@Pierre Lafortune是的。但是我的实际值是
400
500
,而不是
2
3
。我想这不是问题。不,不应该。你有没有试过这个函数?你是不是在为每一组寻找一个成对的平均值?我的函数只找到总体平均值。
collapse_df(df, column="A", pair=2:3, FUN=median)
collapse_df(df, "A", 2:3, sum)
collapse_df(iris[-5], column=1, seq(5,6,.1), median)