我必须在R中将一个向量分成n个大小相等的块.我找不到任何基本函数来做到这一点.谷歌也没有把我带到任何地方.所以这就是我想出来的,希望它可以帮助某些人.
x <- 1:10
n <- 3
chunk <- function(x,n) split(x, factor(sort(rank(x)%%n)))
chunk(x,n)
$`0`
[1] 1 2 3
$`1`
[1] 4 5 6 7
$`2`
[1] 8 9 10
Run Code Online (Sandbox Code Playgroud)
任何评论,建议或改进都非常受欢迎和赞赏.
干杯,塞巴斯蒂安
我有一个2列和3659行的数据框 df
我试图通过平均此数据框中的每10行或13行来减少数据集,所以我尝试了以下方法:
# number of rows per group
n=13
# number of groups
n_grp=nrow(df)/n
round(n_grp,0)
# row indices (one vector per group)
idx_grp <- split(seq(df), rep(seq(n_grp), each = n))
# calculate the col means for all groups
res <- lapply(idx_grp, function(i) {
# subset of the data frame
tmp <- dat[i]
# calculate row means
colMeans(tmp, na.rm = TRUE)
})
# transform list into a data frame
dat2 <- as.data.frame(res)
Run Code Online (Sandbox Code Playgroud)
但是,我不能将行数除以10或13,因为数据长度不是拆分变量的倍数.所以我不确定应该做什么(我只想要计算最后一组的平均值 - 即使少于10个元素)
我也试过这个,但结果是一样的:
df1=split(df, sample(rep(1:301, 10)))
Run Code Online (Sandbox Code Playgroud) 我想对前 3 行的数量求和,然后对后 3 行的数量求和,依此类推。基本上,每 3 行求和。
下面是一个可重现的代码:
id <- 1:15
numbers <- 6:20
df <- data.frame(id, numbers)
Run Code Online (Sandbox Code Playgroud)
请帮忙,谢谢!在我的真实数据中,我需要每 550 行求和。