【发布时间】:2015-05-16 00:51:24
【问题描述】:
我正在寻找在 R 中将数据分组为小块的答案。假设我有
df = data.frame(a = c(1, 2, 3, 1, 5), b = c(2, 3, 2, 4, 4))
我想要一个新列来指定组 ID。具有相同 a 或 b 值的行将被分组为一组。每个新组的组 ID 都会递增。
样本的最终输出是
Group a b
1 1 2
2 2 3
1 3 2
1 1 4
1 5 4
这个问题其实并不新鲜。我可以用 for 循环解决它
i.range = nrow(a) - 1
j.range = nrow(a)
k = 2
df$group_id = 1
for(i in 1:i.range){
for(j in 2:j.range){
#if not a new group
if (df[j,"a"] == df[i, "a"] |
df[j, "b"] == df[i, "b"]) df[j, "group_id"] = df[i, "group_id"]
else{
df[j, "group_id"] = k
k = k+1
}
}
}
问题是我的数据框有超过 40k 行。两个循环可能会永远运行它。
【问题讨论】: