【问题标题】:Apply operation on the next element of the data frame column vector对数据框列向量的下一个元素应用操作
【发布时间】:2019-08-07 09:25:37
【问题描述】:

假设我有一个这样的 df

df1 <- data.frame(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9),
                 var2 = c(2, 8, 0, 7, 3, 4, 1, 10, 13))

我想得到一个产生以下操作的值向量:

(x-median(x-1))/median(x-1)

其中 -1 指的是列中元素的索引。例如,对于列 var2 中的第一个元素,结果是:

(2-(median(c( 8, 0, 7, 3, 4, 1, 10, 13))) )/(median(c( 8, 0, 7, 3, 4, 1, 10, 13))) 
-0.63636

谢谢!

【问题讨论】:

    标签: r dataframe apply lapply sapply


    【解决方案1】:

    使用sapply,我们可以遍历var2中每个值的索引,忽略该值并计算剩余值的median并执行计算。

    sapply(seq_along(df1$var2), function(i) {
        med_i <- median(df1$var2[-i])
       (df1$var2[i] - med_i)/med_i
    })
    #[1] -0.6364  1.2857 -1.0000  1.0000 -0.4545 -0.2000 -0.8182  1.8571  2.7143
    

    【讨论】:

    • 这比 for 循环快吗?
    • 如果for循环编写正确,for循环可以和sapply一样快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2018-02-23
    • 2017-02-25
    • 1970-01-01
    相关资源
    最近更新 更多