這是一個問題在一個更大的規模非常簡化的版本。 的目的是使用data.table
結構和更快的排序和多個列分組dplyr
命令。dplyr,data.table和setDT互動問題
正確的版本如下:
library(dplyr)
library(data.table)
library(dtplyr)
library(lubridate)
# data set
dt = data.frame(id = c("a","b", "a"),
date = ymd(c("2016-01-03","2016-01-02","2016-01-01")),
value = c(10,5,9), stringsAsFactors = F)
# process to get the id of the largest value
(setDT(dt, key=c("id","value")) %>% select(id,value) %>% arrange(desc(value)) %>% slice(1))$id -> picked_id
# return all rows of this id
dt %>% filter(id %in% picked_id)
# id date value
# 1: a 2016-01-01 9
# 2: a 2016-01-03 10
但是,當我嘗試在我的劇本不同的位置使用setDT
我得到不同的結果:
dt = data.frame(id = c("a","b", "a"),
date = ymd(c("2016-01-03","2016-01-02","2016-01-01")),
value = c(10,5,9), stringsAsFactors = F)
(dt %>% select(id,value) %>% setDT(., key=c("id","value")) %>% arrange(desc(value)) %>% slice(1))$id -> picked_id
dt %>% filter(id %in% picked_id)
# id date value
# 1 a 2016-01-03 9
# 2 a 2016-01-02 10
顯然,還有其他這個簡單的任務更容易理解的腳本,但我想明白爲什麼會出現這個問題。
兩個'dt'變量不定義相同的數據幀。如果我使用一個,我會得到一致的結果。 –