【发布时间】:2014-03-10 02:17:44
【问题描述】:
使用data.table 我可以执行以下操作:
library(data.table)
dt = data.table(a = 1:2, b = c(1,2,NA,NA))
# a b
#1: 1 1
#2: 2 2
#3: 1 NA
#4: 2 NA
dt[, b := b[1], by = a]
# a b
#1: 1 1
#2: 2 2
#3: 1 1
#4: 2 2
在dplyr 中尝试相同的操作,但是数据被a 打乱/排序:
library(dplyr)
dt = data.table(a = 1:2, b = c(1,2,NA,NA))
dt %.% group_by(a) %.% mutate(b = b[1])
# a b
#1 1 1
#2 1 1
#3 2 2
#4 2 2
(除此之外,上面还对原始dt 进行了排序,考虑到dplyr 不就地修改的理念,这让我有些困惑——我猜这是dplyr 如何与data.table)
dplyr 的实现方式是什么?
【问题讨论】:
-
我猜这是因为
group_by在内部调用了setkey。基本上,它没有ad hoc by。但我可能在这里错了。 -
请注意,使用常规 R 数据框时不会发生这种情况。
-
这是一个错误。可以在github上提交吗?
-
@hadley 你的意思是原始 dt 的排序还是两者都有?
-
@eddi 我很确定这是同一个问题,所以两者都是。
标签: r data.table dplyr