我正在尝试找到一种方法来确定数据框中一组列何时更改其值。让我直接说明,请考虑以下示例:
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)。
- code列类似于一组行的代码(想象几个具有不同代码的这样的组)。代码和计数是我的数据表中的键。
- val0、val1、val2列类似于分数。
上面的数据框应该被理解为:'ELEMENT 1'的分数从5、6、3开始,保持不变,直到第4次迭代时它们变成了6、6、3,然后又变回了5、6、3。
我的问题是,有没有办法获取数据框的第1、第4和第5行?有没有办法检测列何时发生更改?(此处有12列)
我尝试使用data.table的重复函数(在大多数情况下完美地工作),但在这种情况下,它将删除所有重复项,并仅留下第1和第4行(删除第5行)。
你有什么建议吗?我不想使用for循环,因为大约有200万行。
cnt列是唯一的ID(可以是日期或时间列,在此简化为int)。 code列类似于一组行的代码(想象几个具有不同代码的这样的组)。代码和计数是我的data.table中的键。 val0、val1、val2列类似于分数。 上面的数据框应该被理解为:'ELEMENT 1'的分数从5、6、3开始,保持不变,直到第4次迭代时它们变成了6、6、3,然后又变回了5、6、3。 我的问题是,有没有办法获取数据框的第1、第4和第5行?有没有办法检测列何时发生更改?(此处有12列) 我尝试使用data.table的重复函数(在大多数情况下完美地工作),但在这种情况下,它将删除所有重复项,并仅留下第1和第4行(删除第5行)。 你有什么建议吗?我不想使用for循环,因为大约有200万行。
uniqlist
/duplist
是data.table
包中的一个函数。由于该函数未被导出,因此您需要使用data.table:::
运算符才能访问它。它基本上将在数据框/数据表上运行(因为它期望列表输入)。希望这能澄清问题? - Arunrle
,但适用于列表,但返回的是索引而不是值。 - Arundata.table
的开发者 -- 难怪!问题已提交。 - Heisenbergdata.table:::uniqlist
的东西放到生产代码中,但我知道这是不被赞同的,因为我当然不是data.table
的开发人员,因此该方法可能会改变。(请参见此处的不满:https://stat.ethz.ch/pipermail/r-devel/2013-August/thread.html#67180) - ijoseph