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。我使用计算器,只是在数据框中排序。我没有真正计算其他人的实际值。\nB
和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)