使用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
的哲学没有在适当的地方进行修改,这对我来说有点混乱 - 我猜这是一个怎样的错误{ {1}}与dplyr
)接口
实现上述目标的data.table
方法是什么?
答案 0 :(得分:1)
在dplyr的当前开发版本中(最终会 成为dplyr 0.2)数据帧和数据之间的行为不同 表:
library(dplyr)
library(data.table)
df <- data.frame(a = 1:2, b = c(1,2,NA,NA))
dt <- data.table(df)
df %.% group_by(a) %.% mutate(b = b[1])
## Source: local data frame [4 x 2]
## Groups: a
##
## a b
## 1 1 1
## 2 2 2
## 3 1 1
## 4 2 2
dt %.% group_by(a) %.% mutate(b = b[1])
## Source: local data table [4 x 2]
## Groups: a
##
## a b
## 1 1 1
## 2 1 1
## 3 2 2
## 4 2 2
这是因为group_by()
已应用于data.table
假设索引将自动生成setkey()
未来的运营速度更快。
如果有强烈的感觉,这是一个不好的默认值,我很乐意改变它。