我编写了这段代码来循环遍历现有的数据帧(blatt2)。我想创建新的数据框(blatt3),我写了for循环的输出。循环有效,但将所有结果写入同一列。 我希望当q增加1时,数据框中应该有一个新列。 所以最后我在blatt2和blatt3中有相同的列。 这是代码:
blatt3 <- data.frame()
for(q in 1:ncol(blatt2)) {
for(i in seq(1, 790, 3)){
r <- c(blatt2[i,q], blatt2[i+1,q], blatt2[i+2,q])
blatt3<- rbind(blatt3, data.frame(mean(r)))
}}
感谢
答案 0 :(得分:0)
这里有一种更像R的方式:
编写一个函数,它可以处理向量中每个n
项的平均值
mean_n = function(x, n) {
tapply(x, (seq_along(x) - 1) %/% n, mean)
}
将该功能应用于您的数据
blatt3 = sapply(blatt2, mean_n, n = 3)
内置数据演示:
sapply(mtcars, mean_n, n = 10)
mpg cyl disp hp drat wt qsec vs am gear carb
0 20.37 5.8 208.61 122.8 3.538 3.1280 18.581 0.6 0.3 3.6 2.5
1 19.89 6.6 259.25 149.6 3.552 3.6689 18.301 0.4 0.3 3.4 2.9
2 20.39 6.2 228.25 152.6 3.654 2.8633 16.914 0.3 0.5 3.9 2.6
3 18.20 6.0 211.00 222.0 3.825 3.1750 16.600 0.5 1.0 4.5 5.0
概括它:
tapply_n = function(x, n, tFUN = mean, ...) {
tapply(x, (seq_along(x) - 1) %/% n, tFUN, ...)
}
使用此版本,您可以将tFUN
指定为mean
或sum
或其他任何内容。