【发布时间】:2013-10-03 21:47:36
【问题描述】:
我正在寻找一种更快的方法来实现以下操作。数据集包含 > 1M 行,但我提供了一个简化示例来说明该任务 --
To create the data table --
dt <- data.table(name=c("john","jill"), a1=c(1,4), a2=c(2,5), a3=c(3,6),
b1=c(10,40), b2=c(20,50), b3=c(30,60))
colGroups <- c("a","b") # Columns starting in "a", and in "b"
Original Dataset
-----------------------------------
name a1 a2 a3 b1 b2 b3
john 1 2 3 10 20 30
jill 4 5 6 40 50 60
上面的数据集经过转换,为每个唯一名称添加了 2 个新行,并且在每一行中,每组列的值独立左移(在本例中,我使用了 a 列和 b 列,但有更多)
Transformed Dataset
-----------------------------------
name a1 a2 a3 b1 b2 b3
john 1 2 3 10 20 30 # First Row for John
john 2 3 0 20 30 0 # "a" values left shifted, "b" values left shifted
john 3 0 0 30 0 0 # Same as above, left-shifted again
jill 4 5 6 40 50 60 # Repeated for Jill
jill 5 6 0 50 60 0
jill 6 0 0 60 0 0
等等。我的数据集非常大,这就是为什么我想看看是否有一种有效的方法来实现它。
提前致谢。
【问题讨论】:
-
每个
columnGroup的列数是否固定?还是该值因列组而异? -
@Ricardo Saporta - 每个列组的固定列数
-
您的数据中是否只有唯一的名称/行?如果不是,您将如何处理重复名称..也就是说,如果您的示例数据具有“john”,而所有其他列具有不同的值..?
-
嘿看!这是@Arun!欢迎回来芽!
-
@RicardoSaporta,在度假.. 设法潜入了一段时间.. :)
标签: r data.table