R根据大数据集的其他变量创建索引

时间:2014-12-19 12:27:14

标签: r bigdata large-files

这是一个小型数据集中的一个简单任务,但我有数百万的观察,所以我需要一个非常快的替代方案。

我想创建一个标识alpha-beta对的索引。 Alpha-betas总是成对出现。用这个很容易创建一个循环,但我发现R停止需要很长时间。任何人都知道大数据集的快速解决方案,以便在下面创建正确的列?

id  var1 var2   index
A   2   alpha   1
A   3   beta    1
B   5   alpha   2
B   6   beta    2
B   4   alpha   3
B   7   beta    3
C   3   alpha   4
C   5   beta    4
D   4   alpha   5
D   8   beta    5

数据样本:

df <- structure(list(id = structure(c(1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 
4L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), var1 = c(2L, 
3L, 5L, 6L, 4L, 7L, 3L, 5L, 4L, 8L), var2 = structure(c(1L, 2L, 
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("alpha", "beta"), class = "factor")), .Names = c("id", 
"var1", "var2"), row.names = c(NA, -10L), class = "data.frame")

2 个答案:

答案 0 :(得分:2)

如果列已经订购

library(data.table)
setDT(df)[, indx:= cumsum(var2=='alpha')]
df
#    id var1  var2 indx
#1:  A    2 alpha    1
#2:  A    3  beta    1
#3:  B    5 alpha    2
#4:  B    6  beta    2
#5:  B    4 alpha    3
#6:  B    7  beta    3
#7:  C    3 alpha    4
#8:  C    5  beta    4
#9:  D    4 alpha    5
#10: D    8  beta    5

答案 1 :(得分:1)

另一种可能性是使用重复。缺点是var2必须只包含Alpha-Beta对,任何缺失值或其他任何东西,这种方法可能会失败:

df$index <- rep(1:(length(df$var2)/2), each = 2)