split - [R - 将一个数据集拆分为多个数据集后,如何执行计算?

我想获取一个数据集并将它分割为多个数据集,假设你有以下代码:


vec = c(1:10)


df = data.frame(vec)


df


 vec


1 1


2 2


3 3


4 4


5 5


6 6


7 7


8 8


9 9


10 10




我想把这个数据集分成5行,每行5个观测值,然后得到每5行的平均值。

目前,我尝试以以下方式拆分代码:


splitdf = split(df, rep(1:2,each = 5))



现在我想得到每个组的平均值,例如,第一个块的平均值是3,第二个块的平均值是8.

然后,我想做一个代表函数并将它存储在一个单独的列中,我的数据框架看起来像下面这样:


 vec mean


1 1 3


2 2 3


3 3 3


4 4 3


5 5 3


6 6 8


7 7 8


8 8 8


9 9 8


10 10 8




时间:

如果你使用的逻辑与组相同,则不需要拆分数据。 例如在ave


df$mean <- ave(df$vec, rep(1:2,each = 5)) 


df



# vec mean


#1 1 3


#2 2 3


#3 3 3


#4 4 3


#5 5 3


#6 6 8


#7 7 8


#8 8 8


#9 9 8


#10 10 8



你可能正在寻找by(),它提供了一个基本拆分,使用rbind()的Unsplit 。


res <- do.call(rbind, 


 by(DF, rep(1:2, each=5), function(x) 


 cbind(x, mean=colMeans(x)) # perform calculations on subsets


 )


 )


res


# vec mean


# 1.1 1 3


# 1.2 2 3


# 1.3 3 3


# 1.4 4 3


# 1.5 5 3


# 2.6 6 8


# 2.7 7 8


# 2.8 8 8


# 2.9 9 8


# 2.10 10 8



数据


DF <- structure(list(vec = 1:10), class ="data.frame", row.names = c(NA, 


-10L))




# Your vector


vec = c(1:10)



# your dataframe


df = data.frame(vec)



# Your split df 


splitdf = split(df, rep(1:2,each = 5))



# -------------------------------------------------------------------------


#initialize a list (avg) with the size of splitdf 


avg <- vector("list", length(splitdf))


# loop through each list and compute the mean and assign each to avg


for (i in seq_along(splitdf)){


 avg[[i]] <- mean(splitdf[[i]]$vec)


}


# avg


# [[1]]


# [1] 3


# 


# [[2]]


# [1] 8


# unlist avg and create a column mean on df


df$mean <- rep(unlist(avg), each=5)


# df


# vec mean


# 1 1 3


# 2 2 3


# 3 3 3


# 4 4 3


# 5 5 3


# 6 6 8


# 7 7 8


# 8 8 8


# 9 9 8


# 10 10 8



...