이것은 매우 큰 규모의 문제를 매우 단순화 한 버전입니다. 목표는 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'변수는 동일한 데이터 프레임을 정의하지 않습니다. 하나를 사용하면 일관된 결과를 얻습니다. –