2015-12-23 9 views
5

में तार्किक पहचानने योग्य नहीं है, डेटाटेबल में उपयोग किए जाने पर लॉजिकल को पहचानने लगते नहीं हैं।डेटा.table निम्न स्निपेट में फ़िल्टर

कम से कम उदाहरण में समस्या को पुन: उत्पन्न करने के मेरे सभी प्रयास विफल हुए, इसलिए मैं यहां पूरा अनुभाग पोस्ट कर रहा हूं। मैं उम्मीद यह हिस्सा "as.logical (cumsum (CURRENT_TRIP))", लेकिन सिर्फ एक आंत महसूस से संबंधित माना जाता ...

# Testdata 
timetable <- data.table(rbind(
    c("r1", "t1_1", "p1", 10, 10), 
    c("r1", "t1_1", "p2", 11, 11), 
    c("r1", "t1_1", "p3", 12, 12), 
    c("r1", "t1_1", "p4", 13, 13), 
    c("r1", "t1_1", "p5", 14, 14), 
    c("r1", "t1_1", "p6", 15, 15), 
    c("r1", "t1_1", "p7", 16, 16), 
    c("r1", "t1_1", "p8", 17, 17), 
    c("r1", "t1_1", "p9", 18, 18), 
    c("r1", "t1_1", "p10", 19, 19), 

    c("r2", "t2", "p11", 9, 9), 
    c("r2", "t2", "p12", 10, 10), 
    c("r2", "t2", "p3", 11, 11), 
    c("r2", "t2", "p13", 12, 12), 
    c("r2", "t2", "p14", 13, 13), 
    c("r2", "t2", "p15", 14, 14), 
    c("r2", "t2", "p16", 15, 15), 
    c("r2", "t2", "p17", 16, 16), 
    c("r2", "t2", "p18", 17, 17) 
)) 
setnames(timetable, c("ROUTE", "TRIP", "STOP", "ARRIVAL", "DEPARTURE")) 
timetable[, ':='(ARRIVAL = as.integer(ARRIVAL), DEPARTURE = as.integer(DEPARTURE))] 


# Input 
startStation <- "p3" 
startTime <- 8 

setorder(timetable, TRIP, ARRIVAL) 
timetable[, ID := .I] 

timetable[,':='(ARR_ROUND_PREV = Inf, ARR_ROUND = Inf, ARR_BEST = Inf, MARKED = F, CURRENT_TRIP = F)] 
timetable[STOP == startStation, ':='(ARR_ROUND_PREV = startTime, ARR_ROUND = startTime, ARR_BEST = startTime, MARKED = T)] 

routes <- timetable[MARKED == T, unique(ROUTE)] 
ids <- timetable[MARKED == T & DEPARTURE > ARR_ROUND, .(ID = ID[DEPARTURE == min(DEPARTURE)]), by = ROUTE][, ID] 

timetable[ID %in% ids, CURRENT_TRIP := T] 
timetable[, MARKED := F] 

trips <- timetable[CURRENT_TRIP == T, unique(TRIP)] 
timetable[TRIP %in% trips, CURRENT_TRIP := as.logical(cumsum(CURRENT_TRIP)), by = TRIP] 

# ? 
timetable 
nrow(timetable[CURRENT_TRIP == T]) #8 
sum(timetable$CURRENT_TRIP == T) #15 

# but 
nrow(timetable[CURRENT_TRIP > 0]) #15 
nrow(timetable[CURRENT_TRIP == 1L]) #15 

किसी भी विचार?

समस्या जीत 64 बिट पर नवीनतम 1.9.7 और 1.9.6 और आर 3.2.3 का उपयोग कर दिखाता है

फैब

+2

मुझे एक बग की तरह लगता है। आप 'विकल्प (datatable.auto.index = FALSE)' सेट कर सकते हैं या 'nrow (timetable [(CURRENT_TRIP == T)] का उपयोग कर सकते हैं। बीटीडब्ल्यू, शुरुआती डेटा.table बनाने का आपका तरीका बेवकूफ है। इसके लिए 'rbind' /' cbind' का उपयोग न करें। – Roland

+0

अपने डेटाटेबल के निर्माण के अलावा, आप '' = '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' के बजाय ' इसके अलावा: मैं समस्या को पुन: उत्पन्न नहीं कर सकता। – Jaap

+0

क्या आप बता सकते हैं कि आपको कोई समस्या है? 'as.logical (cumsum (CURRENT_TRIP))' अपेक्षित के रूप में काम कर रहा है (ओएसएक्स पर डेटा.table 1.9.7 और आर 3.2.2 का उपयोग कर)। – Jaap

उत्तर

2

आप ठीक उसी बग मेरे पास है कि है !!!

Strange issue with data.table row search

मैं भी एक न्यूनतम कोड के साथ पुन: पेश नहीं कर सका!

आपके कोड का मेरा समाधान बदल रहा है कि आप कॉलम CURRENT_TRIP को कैसे सेट करते हैं।

timetable[ID %in% ids]$CURRENT_TRIP <- T 
timetable[, MARKED := F] 

trips <- timetable[CURRENT_TRIP == T, unique(TRIP)] 
timetable[TRIP %in% trips]$CURRENT_TRIP <- timetable[,as.logical(cumsum(CURRENT_TRIP)), by = TRIP]$V1 

# ? 
timetable 
nrow(timetable[CURRENT_TRIP == T]) #8 
sum(timetable$CURRENT_TRIP == T) #15 

# but 
nrow(timetable[CURRENT_TRIP > 0]) #15 
nrow(timetable[CURRENT_TRIP == 1L]) #15 

कॉलम सेट करने के लिए डीटी [, कॉलम: = टी] नोटेशन का उपयोग करने से मुझे भी यही समस्या हुई! मुझे यकीन नहीं है कि क्यों और मैं इसे ठीक करने के लिए data.tables के निर्माता के संपर्क में हूं!

+0

यह भी जोड़ने के लिए नवीनतम डेटा.table पर परीक्षण किया गया है स्थिर रिलीज (1.9.6) जैसा कि हम बोलते हैं और मैक ओएसएक्स पर आर 3.2.2। बग कोड और फिक्स दोनों अपेक्षित के रूप में व्यवहार किया। – nbafrank

+0

हाय, पैकेज डेवलपर्स द्वारा बग की सूचना दी गई और स्वीकार किया गया। अपडेट के लिए यहां देखें: https://github.com/Rdatatable/data.table/issues/1479 –

+0

धन्यवाद! यह अच्छा है! – nbafrank