r将for循环的输出写入数据帧的新列

时间:2017-10-31 13:54:06

标签: r for-loop

我编写了这段代码来循环遍历现有的数据帧(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)))
  }}

感谢

1 个答案:

答案 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指定为meansum或其他任何内容。