gpt4 book ai didi

r - 如何使用 R 中的过渡日期数据创建面板数据集?

转载 作者:行者123 更新时间:2023-12-04 22:39:57 24 4
gpt4 key购买 nike

我有一个结构如下的数据集:

ID   origin   destination  time
1 a b 2
2 b a 1
2 a c 4
3 c b 1
3 b c 3

我想把它变成一个 ID 时间面板数据集,如:
ID   location  time
1 a 1
1 b 2
1 b 3
1 b 4
2 a 1
2 a 2
2 a 3
2 c 4
3 b 1
3 b 2
3 c 3
3 c 4

所以基本上,我需要为主题不改变位置时创建面板行,并根据起点和目的地的信息填写它们应该位于的位置。 R 中是否有任何函数可以顺利完成此操作?我更喜欢使用 data.table 或 dplyr 的解决方案。

最佳答案

你可以用每个 time 做一张 table 您想知道的location每个ID :

newDT = DT[, CJ(ID = unique(ID), time = 1:4)]

然后把原始数据放在长格式中,推断出
  • 原点为 time-1
  • 目的地保留为 time

  • mDT = melt(DT, id = c("ID", "time"), value.name = "loc", variable.name = "loc_role")
    mDT[loc_role == "origin", time := time - 1L]
    mDT[, loc_role := NULL]
    setorder(mDT, ID, time)

    ID time loc
    1: 1 1 a
    2: 1 2 b
    3: 2 0 b
    4: 2 1 a
    5: 2 3 a
    6: 2 4 c
    7: 3 0 c
    8: 3 1 b
    9: 3 2 b
    10: 3 3 c

    ...并使用滚动更新连接填充新表:
    newDT[, location := mDT[.SD, on=.(ID, time), roll=TRUE, x.loc]]

    ID time location
    1: 1 1 a
    2: 1 2 b
    3: 1 3 b
    4: 1 4 b
    5: 2 1 a
    6: 2 2 a
    7: 2 3 a
    8: 2 4 c
    9: 3 1 b
    10: 3 2 b
    11: 3 3 c
    12: 3 4 c

    (Dplyr 还没有滚动或更新连接,所以我想没有类似的。)

    这个怎么运作
  • CJ取一些向量的笛卡尔积,类似于expand.grid
  • melt转换为长格式,保持变量作为 id = 传递
  • x[i, v := expr]编辑栏vxi 选择的行上
  • setorder排序到位
  • .SDjx[i,j]指的是由 x 选择的数据子集 ( i )
  • x[i, on=, roll=, expr]是一个滚动连接,由表 i 选择的行, on=roll=
  • 表达式 x.v在连接内选择列 v来自 x

  • 关于最后一个项目符号,前缀 i.*会对来自 i 的列做同样的事情.

    关于r - 如何使用 R 中的过渡日期数据创建面板数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102782/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com