gpt4 book ai didi

r - 确定 data.frame 的列何时更改值并返回更改的索引

转载 作者:行者123 更新时间:2023-12-04 01:56:51 25 4
gpt4 key购买 nike

我试图找到一种方法来确定一组列何时更改 data.frame 中的值。让我开门见山,请考虑以下示例:

x<-data.frame(cnt=1:10, code=rep('ELEMENT 1',10), val0=rep(5,10), val1=rep(6,10),val2=rep(3,10))
x[4,]$val0=6
  • cnt 列是唯一的 ID(可以是日期或时间列,为简单起见,此处为 int)
  • 代码列就像一组行的代码(想象几个这样的组,但具有不同的代码)。代码和 cnt 是我的 data.table 中的键。
  • val0,val1,val2 列类似于分数。

  • 上面的data.frame应该读作:'ELEMENT 1'的分数开始为5,6,3,保持原样,直到第4次迭代时,它们变成了6,6,3,然后又变回了5,6 ,3.

    我的问题,有没有办法得到 一、四、五 data.frame 的行?有没有办法检测列何时发生变化? (顺便说一句,有 12 列)

    我尝试使用重复的 data.table(在大多数情况下都可以完美运行),但在这种情况下,它将删除所有重复项并仅保留第 1 行和第 4 行(删除第 5 行)。

    你有什么建议吗?我宁愿不使用 for 循环,因为大约有。 2M 线。

    最佳答案

    data.table版本 1.8.10(CRAN 中的稳定版本),有一个(n)(未导出)函数,名为 duplist正是这样做的。它也是用 C 编写的,因此速度非常快。

    require(data.table) # 1.8.10
    data.table:::duplist(x[, 3:5])
    # [1] 1 4 5

    如果您使用的是 data.table 的开发版本(1.8.11),然后有一个更高效的版本(在内存方面)重命名为 uniqlist ,这完全相同。可能这应该为下一个版本导出。似乎不止一次出现在 SO 上。让我们来看看。
    require(data.table) # 1.8.11
    data.table:::uniqlist(x[, 3:5])
    # [1] 1 4 5

    关于r - 确定 data.frame 的列何时更改值并返回更改的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266015/

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