【发布时间】:2017-08-03 15:05:11
【问题描述】:
这可能是一个愚蠢的问题。但是我想在每组数据之前插入一个角色。我在网上只能找到如何在每个组之后插入一行。此外,插入的行将具有代表每个 ID 的序列号。 例如,我有一个像
这样的数据表df
ID TIME VAR VALUE
101 07/02 V1 9
101 07/03 V2 NA
101 07/03 V3 10
221 06/01 V1 2
221 07/03 V2 4
我想要类似的东西:
ID TIME VAR VALUE
101 NA sequence 1
101 07/02 V1 9
101 07/03 V2 NA
101 07/03 V3 10
221 NA sequence 2
221 06/01 V1 2
221 07/03 V2 4
真实的表有大约 1400 万行和 14000 个唯一 ID。有没有快速更新表格的方法?谢谢!
【问题讨论】:
-
df[, rbind(.(write_your_tuple_here), .SD), by=ID]?如果不创建新表,则无法更新表以添加/删除行。 stackoverflow.com/q/10790204 在您的情况下,您似乎在宽表上使用了melt。如果是这样,在熔化之前以该格式添加额外的列可能会更容易。 -
嗨弗兰克,第一个选项不起作用,或者我可能在里面放了错误的东西(write_your_tuple_here)。对于熔体和额外的柱子,我不确定它是如何下降的。你可以再解释一下吗?谢谢!
-
嗯,不确定。是不是每个ID都有一行V1,一行V2,一行V3?我的意思是
.(TIME = NA_character_, VAR = "sequence", VALUE = .GRP)作为您的元组,或者插入行的任何规则。 (.GRP 是序列号,参见?.GRP。) -
不,不是每个 ID 都只有一个 V1、V2 和 V3。可能有多个,还有V4,V5...我正在尝试修改元组,还没有成功。但是很高兴知道 .GRP 函数。
-
好的。 Fwiw,这是
rbind方法有效的示例:DT = data.table(ID= 1:2, v = 3:4, v2 = 5:6); DT[, rbind(.(v = 0, v2 = .GRP), .SD), by=ID]
标签: r data.table