【问题标题】:How to use values from a previous row and column如何使用前一行和前一列的值
【发布时间】:2017-12-31 16:49:57
【问题描述】:

我正在尝试创建一个新变量,它是先前行和列的函数。我在 dplyr 中找到了 lag() 函数,但它不能完全实现我想要的。

library(dplyr)
x = data.frame(replicate(2, sample(1:3,10,rep=TRUE)))

   X1 X2
1   1  3
2   2  3
3   2  2
4   1  3
5   2  3
6   2  1
7   3  2
8   1  1
9   1  3
10  2  2

x = mutate(x, new_col = # if x2==1, then the value of x1 in the previous row,
                        # if x2!=1, then 0))

我的最佳尝试:

foo = function(x){
    if (x==1){
        return(lag(X1))
    }else{
        return(0)
}

x = mutate(x, new_col=foo(X1))

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    在基础 R 中,您可以使用

    x$newcol <- (x$X2 == 1) * c(NA, tail(x$X1, -1))
    

    (x$X2 == 1)保证X2所有不等于1的元素为0,当X2 == 1时,这两项的倍数会返回X1的滞后值。

    【讨论】:

      【解决方案2】:

      我们可以使用ifelse

      x %>% 
        mutate(newcol = ifelse(X2==1, lag(X1), 0))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多