小编yol*_*and的帖子

debugging:为多列创建多个滞后的函数(dplyr)

我想创建多个变量的多个滞后,所以我认为编写函数会有所帮助.我的代码抛出警告("截断向量为长度1")和错误结果:

library(dplyr)
time <- c(2000:2009, 2000:2009)
x <- c(1:10, 10:19)
id <- c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2)
df <- data.frame(id, time, x)



three_lags <- function (data, column, group, ordervar) {
  data <- data %>% 
    group_by_(group) %>%
    mutate(a = lag(column, 1L, NA, order_by = ordervar),
            b = lag(column, 2L, NA, order_by = ordervar),
            c = lag(column, 3L, NA, order_by = ordervar)) 
  }

df_lags <- three_lags(data=df, column=x, group=id, ordervar=time) %>%
  arrange(id, time)
Run Code Online (Sandbox Code Playgroud)

此外,我想知道是否有更优雅的解决方案使用mutate_each,但我也没有让它工作.我当然可以为每个新的滞后变量写一个带有一行的长代码,但我想避免这种情况.

编辑:

akrun的dplyr答案有效,但需要很长时间来计算大数据帧.使用的解决方案data.table似乎更有效.因此,仍然可以找到一个dplyr或其他解决方案,它也允许实现多个列和几个滞后.

编辑2:

对于多列而没有组(例如"ID"),由于其简单性,以下解决方案似乎非常适合我.代码当然可以缩短,但是一步一步:

df <- arrange(df, time)

df.lag …
Run Code Online (Sandbox Code Playgroud)

r dplyr

6
推荐指数
1
解决办法
1670
查看次数

%运算符vs ==,处理NA的

我想知道我的代码是什么问题,并发现我奇怪的结果的原因是这个意外处理NA的==%in%.

> NA %in% NA
[1] TRUE
> NA == NA
[1] NA
Run Code Online (Sandbox Code Playgroud)

是否有一个原因?我一直在阅读有关==运算符及其处理的NA信息,但无法找到有关%in%运算符处理NA的原因的任何信息.

r

5
推荐指数
1
解决办法
103
查看次数

标签 统计

r ×2

dplyr ×1