edd*_*ddi 7 r dplyr data.table
使用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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,上面也对原文进行了排序dt,这对我来说有些令人困惑,因为我dplyr的哲学没有修改到位 - 我猜这是一个如何dplyr与界面相关的错误data.table)
dplyr实现上述目标的方法是什么?
在 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
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为group_by()应用于data.table
自动执行时setkey()假设该索引将使未来的操作更快。
如果有强烈的感觉这是一个糟糕的默认设置,我很乐意更改它。
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |