【发布时间】:2018-03-02 21:12:37
【问题描述】:
我正在尝试编写for 循环来解决data.frame 上的以下等式:
a <- matrix(runif(n = 2151, 0, 0.5), nrow = 2151, ncol = 44) # matrix with certain values from 0.0 to 0.5
a <- data.frame(a) # save to data.frame
b <- runif(n = 2151, 0.9, 1) # generate values from 0.9 to 1
a[ ,2] <- b # introducing higher values to data.frame
mean_error = numeric(0)
for(i in seq(1, length(a), 2)){ # iterate over 1st,3rd etc. column
if(a[[i]] < 0.9) { # skip the column if values are above value
mean_err = mean(100 * abs(a[[i]] - a[[i + 1]] / mean(a[[i]] + a[[i + 1]]))) # calculate mean error of column
mean_error = append(mean_error, mean_err) # save results
}
}
它只是为我提供了前 2 列的平均误差,并进一步迭代给出 21 个值。我想让这个循环对列值的变化更敏感,并让它在遍历具有更高值(高于 1)的data.frame 时跳过第二列。显然,它不会省略第二列并产生错误的结果。我试图用if(a[[i]] < 0.9) 解决这个问题,但它不起作用。还尝试melt()-ing 数据并遍历行,但没有太大成功。我将不胜感激任何解决这个问题的想法。谢谢!
【问题讨论】:
-
只是为了确定,所以你想在跳过第二行的同时计算每列的平均误差?
-
是的,完全正确。我想对第一列和第三列有平均错误。情况是,有时从我的实验室工作中获得的数据集不一定所有列的值都低于 0.9(这取决于 aparature 校准周期,然后引入具有更高值的列)。我想要一个区分大小写的循环。
-
我怀疑它有一个更简单的解决方案。值 > 0.9 时,设置为 0 或从列中删除它们?您只想计算第 1 列和第 3 列或(1 和 3)的平均绝对误差,然后(3 和 5)等等?
标签: r loops dataframe iteration