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

2023-11-27

我想创建多个变量的多个滞后,所以我认为编写一个函数会很有帮助。我的代码抛出警告(“将向量截断为长度 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)

我也想知道是否有一个更优雅的解决方案使用mutate_each,但我也没有让它发挥作用。我当然可以为每个新的滞后变量编写一个长代码,其中包含一行,但我想避免这种情况。

EDIT:

akrun 的 dplyr 答案有效,但需要很长时间才能计算大型数据帧。解决方案使用data.table似乎更有效率。因此,仍然需要找到一个 dplyr 或其他允许对多个列和多个滞后实施的解决方案。

EDIT 2:

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

df <- arrange(df, time)

df.lag <- shift(df[,1:24], n=1:3, give.names = T)  ##column indexes of columns to be lagged as "[,startcol:endcol]", "n=1:3" sepcifies the number of lags (lag1, lag2 and lag3 in this case)

df.result <- bind_cols(df, df.lag)

我们可以用shift from data.table'n' 可以取多个值

library(data.table)
setDT(df)[order(time), c("a", "b", "c") := shift(x, 1:3) , id][order(id, time)]

假设,我们需要在多列上执行此操作

df$y <- df$x
setDT(df)[order(time), paste0(rep(c("x", "y"), each =3), 
                c("a", "b", "c")) :=shift(.SD, 1:3), id, .SDcols = x:y]

The shift也可以用在dplyr

library(dplyr)
df %>% 
  group_by(id) %>% 
  arrange(id, time) %>% 
  do(data.frame(., setNames(shift(.$x, 1:3), c("a", "b", "c"))))
#    id  time     x     a     b     c
#   <dbl> <int> <int> <int> <int> <int>
#1      1  2000     1    NA    NA    NA
#2      1  2001     2     1    NA    NA
#3      1  2002     3     2     1    NA
#4      1  2003     4     3     2     1
#5      1  2004     5     4     3     2
#6      1  2005     6     5     4     3
#7      1  2006     7     6     5     4
#8      1  2007     8     7     6     5
#9      1  2008     9     8     7     6
#10     1  2009    10     9     8     7
#11     2  2000    10    NA    NA    NA
#12     2  2001    11    10    NA    NA
#13     2  2002    12    11    10    NA
#14     2  2003    13    12    11    10
#15     2  2004    14    13    12    11
#16     2  2005    15    14    13    12
#17     2  2006    16    15    14    13
#18     2  2007    17    16    15    14
#19     2  2008    18    17    16    15
#20     2  2009    19    18    17    16
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试:为多列创建多个滞后的函数 (dplyr) 的相关文章

  • LaTex 中与 knit 和 xtable 交叉引用的问题

    我目前正在与 R Studio 合作 使用 LaTex 中的 R knitr 生成 PDF 文档 在这些文档中 我想在文本中引用的表格中展示我的部分结果 我使用 R 中的 xtable 包生成这些表 它运行良好并为我提供了正确的表 到目前为
  • par(mfrow=c(1,2)) 不显示并排密度图[重复]

    这个问题在这里已经有答案了 par mfrow c 1 2 plot 1 12 log y plot 1 2 xaxs i 然而 当我尝试做并排密度图时 图会单独输出 load the stud recs dataset library U
  • 基于服务器中的条件逻辑呈现闪亮的用户输入

    我正在尝试设置一个闪亮的导航栏面板页面 其中用户控制我根据一组单选按钮中所做的初始选择来显示更改 我直接在 ui 中渲染单选按钮 然后在 Server r 中的 观察到的 逻辑控制结构内构建条件控件 弹出错误是因为我的初始 if 语句计算结
  • ggplot2可以在一个图例中分别控制点大小和线大小(线宽)吗?

    一个使用的例子ggplot2绘制数据点组和连接每组均值的线 并使用相同的映射aes for shape并为linetype p lt ggplot mtcars aes gear mpg shape factor cyl linetype
  • R 中具有稳健回归的异常值

    我正在使用lmrobR 中的函数使用robustbase用于稳健回归的库 我会把它用作 rob reg lt lmrob y 0 dat method MM control a1 当我想返回我使用的摘要时summary rob reg 稳健
  • 如何在 ggplot 中保持配色方案,同时删除每个图中未使用的级别?

    我想比较一个图中的数据的一些子组和另一图中的一些其他子组 如果我绘制一个图 其中绘制了所有子组 那么这个数字将是巨大的 并且每个单独的比较都会变得困难 我认为如果给定的子组在所有图中都具有相同的颜色 这对读者来说会更有意义 这是我尝试过的两
  • LDA with topicmodels,如何查看不同文档属于哪些主题?

    我正在使用 topicmodels 包中的 LDA 我已经在大约 30 000 个文档上运行它 获取了 30 个主题 并获得了主题的前 10 个单词 它们看起来非常好 但我想看看哪些文档属于哪个主题的概率最高 我该怎么做 myCorpus
  • 使用 broom 和 tidyverse 总结 r 平方游戏

    我发布了一个问题here https stackoverflow com questions 48627287 getting adjusted r squared value for each line in a geom smooth
  • 在 R 中创建一个运行计数变量?

    我有一个足球比赛结果的数据集 我希望通过创建一组类似于世界足球 Elo 公式的运行评级来学习 R 我遇到了麻烦 在 Excel 中看似简单的事情在 R 中并不完全直观 例如 4270 个观察中的前 15 个具有必要的变量 date t 1
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 使用 R 选择第一个非 NA 值

    df lt data frame ID c 1 1 1 2 3 3 3 test c NA 5 5 6 4 NA 7 3 NA 10 9 我想创建一个名为 value 的变量 它是每个单独 ID 测试的第一个非 NA 值 对于只有NA的个体
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o

随机推荐

  • Python截断国际字符串

    我已经尝试调试这个问题太久了 而且我显然不知道我在做什么 所以希望有人可以提供帮助 我什至不确定我应该问什么 但事情是这样的 我正在尝试发送 Apple 推送通知 它们的有效负载大小限制为 256 字节 因此 减去一些开销内容 我就剩下大约
  • SVG 元素的 D3 多行工具提示

    我正在尝试添加多行工具提示 但遇到了一些问题 主要是 Internet Explorer 处理它们的方式 我实际上可以让我的 html 看起来正确呈现 但 IE 会忽略工具提示中的换行符并将其全部放在同一行上 以下是我尝试过的一些片段 不是
  • Python SSL 服务器给我“501 Unsupported method GET”

    我已经关注了这个链接使用 SSL 构建一个简单的文件服务器 from http server import HTTPServer BaseHTTPRequestHandler import ssl httpd HTTPServer loca
  • 使用 Gmail 进行 SMTP 时,可以设置不同的“发件人”地址吗?

    我正在使用 Swift Mailer 406 发送电子邮件 我连接到我的 smtp gmail com 帐户 然后执行以下操作 gt setFrom array from gt fromname 但发送的邮件却是原来的gmail账户邮箱 我
  • 互斥锁优先级

    在多线程 2线程 程序中 我有这样的代码 while 1 m lock m unlock m是一个互斥锁 在我的例子中是一个 c 11std mutex 但我认为如果我使用不同的库它不会改变 假设第一个线程拥有互斥体并且它在 部分 第二个线
  • 对构造函数的未定义引用

    我是一名尝试使用 C 的 Java 开发人员 我刚刚创建了一个新课程 在我的其他课程中 我想要一个可以存储 Filter 对象的列表 Filter h ifndef FILTER H define FILTER H class Filter
  • 递归函数循环和堆栈

    众所周知 所有递归函数都可以仅使用单个循环和堆栈来编写 尽管这种转换可能被批评为丑陋或可读性较差 但其主要用途显然是避免破坏堆 有一些自然的方法可以将简单的递归函数转换为循环 例如 使用累加器进行简单的尾递归消除 到目前为止 我还没有看到这
  • 为什么使用非贪婪模式时 Java 正则表达式“匹配”与“查找”会得到不同的匹配? [复制]

    这个问题在这里已经有答案了 因此 我遇到了一个错误 该错误是由于期望 matches 方法找到与使用 find 完全相同的匹配项而引起的 通常是这种情况 但看起来如果非贪婪模式可以延伸到贪婪地接受整个字符串 那么它是允许的 这看起来像是 J
  • 最佳 bcrypt 工作因子

    密码散列的理想 bcrypt 工作因素是什么 如果我使用因子 10 则在我的笔记本电脑上散列密码大约需要 0 1 秒 如果我们最终得到一个非常繁忙的网站 那么仅仅检查人们的密码就会变成大量的工作 也许使用工作因子 7 会更好 将每次笔记本电
  • Git 克隆在特定存储库上返回结果 = 18 代码 = 200

    我正在尝试从我们公司存储库克隆内部存储库 但不断收到此错误 error RPC failed result 18 HTTP code 200 它总是仅在存储库完全下载后才会发生 需要一段时间 我尝试过使用 torotiseGit 这是报告
  • TeamCity 的 AssemblyInfo 修补程序的数字格式

    我曾经使用过 TeamCity WiX MSBuild 社区任务 现在我已经升级到 WiX 3 5 我不记得我是如何配置它的 当我浏览 TeamCity 时 我遇到了 AssemblyInfo Patcher 我想 太棒了 这将使我的生活变
  • 如何在 MATLAB 中创建分段内联函数?

    我在 MATLAB 中有一个函数 它接受另一个函数作为参数 我想以某种方式定义一个可以传入的分段内联函数 这在 MATLAB 中是否可行 编辑 我想代表的功能是 f x 1 0 0 0 lt x lt 0 5 1 0 0 5 lt x lt
  • 从 JavaScript 读取 web.config

    有什么方法可以使用 javascript 读取 web config 中的配置值吗 我为什么要这么做 我的网站中有一个计时器 如果用户 20 分钟不活动 它会弹出一个带有倒计时器的模式对话框 倒计时 2 分钟 如果用户没有响应 系统会将其注
  • 如果数组中的所有对象都有属性值,则返回 true

    我有一个对象数组 如下所示 scope objectArray Title object1 Description lorem Value 57 Title object2 Description ipsum Value 32 Title
  • 在 sqlalchemy 中使用计算列更新表

    我正在使用 SQLalchemy 在旧版 MSSQL 数据库中工作 我有一个声明性映射 该数据库有几个表 其中包含计算列 我可以很好地阅读它们 但是 当然 写入计算列不起作用 但是 当我创建并尝试保存 ORM 对象时 SQLAlchemy
  • 活动的 AlertDialog 样式按钮

    我有一个活动 底部有一个 保存 和 取消 按钮 在 AlertDialog 中 按钮显示在某种样式化的容器视图内 我怎样才能让我的活动中的按钮具有相同的外观 具体来说 我如何应用 AlertDialog 中按钮容器视图的样式来表示我的 Ac
  • 在 JavaScript 中将字符串转换为变量名

    我一直在寻找解决方案 但找不到任何有效的解决方案 我有一个变量叫做onlyVideo onlyVideo 字符串被传递到函数中 我想设置变量onlyVideo在函数内部作为某种东西 我怎样才能做到这一点 有很多变量可以被调用到函数中 所以我
  • Android 输入文本对话框

    当用户单击Button在我的应用程序中 打印在SurfaceView 我想要一条短信Dialog出现 我想将结果存储在String 我想要文字Dialog覆盖当前屏幕 我怎样才能做到这一点 听起来是一个使用的好机会警报对话框 尽管看起来很简
  • OpenCV 2.2 Windows XP MinGW 构建在namedWindow、imshow 上崩溃

    我下载了适用于 Windows 的最新 OpenCV 2 2 源代码 并在 CMake 2 8 的帮助下使用 MinGW 4 4 1 在 Windows XP 上进行编译 一切都很顺利 编译 mingw32 make 和安装 mingw32
  • 调试:为多列创建多个滞后的函数 (dplyr)

    我想创建多个变量的多个滞后 所以我认为编写一个函数会很有帮助 我的代码抛出警告 将向量截断为长度 1 和错误结果 library dplyr time lt c 2000 2009 2000 2009 x lt c 1 10 10 19 i