【问题标题】:Use a for loop to define a column in a dataframe based on adjacent columns in r使用 for 循环根据 r 中的相邻列定义数据框中的列
【发布时间】:2020-07-07 17:47:35
【问题描述】:

我有一个如下图所示的数据框:

> head (DATA)
  N_b N_l X_ext    x.sqr_sum   e_1    e_2    e_3   e_4    e_5
1   5   3    18       810      14.6   2.6   -9.4    0      0
2   5   3    18       810      14.6   2.6   -9.4    0      0
3   5   4    24       1440     21.8   9.8   -2.2  -14.2    0
4   5   4    24       1440     21.8   9.8   -2.2  -14.2    0
5   5   5    30       2250      29    17      5    -7     -19
6   5   5    30       2250      29    17      5    -7     -19

我想在数据框中添加一个新列 R,使其使用以下等式:

为 N_L 值找到 R 的最大值,直到它在上面的数据帧 DATA 中给出。 这意味着对于 N_L 等于 3 的数据帧的第 1 行和第 2 行,新添加的列本身适用于两者:

DATA$R1 <- (1 / DATA$N_b) + ((DATA$X_ext * (DATA$e_1)) / DATA$x.sqr_sum)
DATA$R2 <- (2 / DATA$N_b) + ((DATA$X_ext * (DATA$e_1 + DATA$e_2)) / DATA$x.sqr_sum)
DATA$R3 <- (3 / DATA$N_b) + ((DATA$X_ext * (DATA$e_1 + DATA$e_2 + DATA$e_3)) / DATA$x.sqr_sum)
DATA$R <- max(DATA$R1, DATA$R2, DATA$R3)

我还需要知道哪个 N_L 值导致 R 的最大值(在 R1、R2 等之间的每一行中,哪一列的数量最大)

对于 N_L = 5 的第 5 行和第 6 行,将有 R1、R2、R3、R4 和 R5,以从中选择最大值。

我想编写一个 for 循环,该循环将遍历每行中小于等于 N_L 的值,并使用适当的总和项求解 R。任何指导表示赞赏!

【问题讨论】:

    标签: r dataframe for-loop


    【解决方案1】:

    对每一行应用相同的计算是什么,函数 apply 就是为此而生的。大纲如下:

    1. 定义您自己的计算 R 的函数:

      compute.R <- function(x) {
         return( x["N_b"] / x["N_l"] + x["X_ext"]*sum()x[5:(4+x["N_l"])] / sum((1:x["N_b"])^2) )
      }
      
    2. 调用 apply 一次计算所有 R 值:

      R <- apply(DATA, FUN=compute.R, MAR=1)
      
    3. 将该列附加到您的数据框:

      DATA <- cbind(DATA, R=R)
      

    【讨论】:

    • 我的问题实际上是关于如何使方程通过 N_l 的不同值并选择正确的术语来对 e_ sum 求和。我不确定如何使用该功能准确执行此操作。
    • 我已经编辑了我的答案以包含完整的函数定义。请注意,apply 传递给函数的参数是刚刚处理的单行的向量,而不是整个数据帧。在分母的总和中,我从位置 5 开始,因为那是 e_1 的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多