/ / data.table कंप्यूट कॉलम फ़िल्टर - r, data.table

डेटा. तालिका कंप्यूट स्तंभ फ़िल्टर-r, data. table

मैं data.table का उपयोग करके एक कॉलम की गणना करने की कोशिश कर रहा हूं;

यहाँ लक्ष्य एक गणना करना है speedup रनटाइम के लिए स्तंभ, 1 थ्रेड के सापेक्ष।

    setup       mode name threads runtime
1:     A      short    K       1      10
2:     A      short    K       1      11
3:     A      short    K       1      10
4:     A      short    K       2       4
5:     A      short    K       2       5
6:     A      short    K       2       8
7:     B      short    K       1      11
8:     B      short    K       1      12
9:     B      short    K       1      10
10:     B      short    K       2       9
11:     B      short    K       2       6
12:     B      short    K       2       8

यहाँ मुझे क्या मिला ...

valT[, speedup:=mean(runtime)/runtime, by=c("setup","threads","name","mode") ]

बेशक, जो स्पीडअप निकलते हैं वे "टी जो मैं हालांकि चाहता हूं; उदाहरण के लिए, पहली पंक्ति का स्पीडअप कंपार्टमेंट 1.1 होना चाहिए। 4 के लिए 2.75 होना चाहिए। यही कारण है कि मुझे चयन को संकीर्ण करने की आवश्यकता है। which लग रहा था कि उत्तर है, लेकिन मैं इसे सही तरीके से लागू नहीं कर सकता:

valT[, speedup:=mean(runtime)/runtime, which(threads==1), by=c("setup","threads","name","mode") ]
Error in `[.data.table`(valT, , runtime/mean(runtime), which(threads ==  :
Provide either "by" or "keyby" but not both

डेटा:

valT = data.table(structure(list(setup = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
mode = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L), .Label = "     short", class = "factor"), name = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "  K", class = "factor"),
threads = c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L
), runtime = c(10, 11, 10, 4, 5, 8, 11, 12, 10, 9, 6, 8)), .Names = c("setup",
"mode", "name", "threads", "runtime"), class = "data.frame", row.names = c(NA,
-12L)))

उत्तर:

जवाब के लिए 3 № 1

यह काम:

valT[, speedup := mean(runtime[threads == 1]) / runtime,
by = c("setup","name","mode")]