द्वारा ठीक से संक्षेप में नहीं संक्षेप में मुझे data.table
के साथ यह समस्या है जो मुझे हाल ही में पागल कर रहा है। यह एक बग की तरह दिखता है लेकिन हो सकता है कि मैं यहां कुछ स्पष्ट याद कर रहा हूं।डेटा.table दो कॉलम
# First some data
data <- data.table(structure(list(
month = structure(c(1356998400, 1356998400, 1356998400,
1359676800, 1354320000, 1359676800, 1359676800, 1356998400, 1356998400,
1354320000, 1354320000, 1354320000, 1359676800, 1359676800, 1359676800,
1356998400, 1359676800, 1359676800, 1356998400, 1359676800, 1359676800,
1359676800, 1359676800, 1354320000, 1354320000), class = c("POSIXct",
"POSIXt"), tzone = "UTC"),
portal = c(TRUE, TRUE, FALSE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE
),
satisfaction = c(10L, 10L, 10L, 9L, 10L, 10L, 9L, 10L, 10L,
9L, 2L, 8L, 10L, 9L, 10L, 10L, 9L, 10L, 10L, 10L, 9L, 10L, 9L,
10L, 10L)),
.Names = c("month", "portal", "satisfaction"),
row.names = c(NA, -25L), class = "data.frame"))
मैं portal
और month
दोनों से यह संक्षेप में प्रस्तुत करना चाहते हैं:
मैं निम्नलिखित डेटा फ्रेम है। - अच्छे पुराने tapply
काम करता है के रूप में उम्मीद के साथ सारांश मैं दिसंबर 2012 और जनवरी-फरवरी 2013 के लिए परिणामों के साथ 3x2 मैट्रिक्स मिलती है:
> tapply(data$satisfaction, list(data$month, data$portal), mean)
FALSE TRUE
2012-12-01 8.5 8.000000
2013-01-01 10.0 10.000000
2013-02-01 9.0 9.545455
data.table
की by
तर्क के साथ सारांश नहीं करता है:
> data[, mean(satisfaction), by = 'month,portal']
month portal V1
1: 2013-01-01 FALSE 10.000000
2: 2013-02-01 TRUE 9.000000
3: 2013-01-01 TRUE 10.000000
4: 2012-12-01 FALSE 8.500000
5: 2012-12-01 TRUE 7.333333
6: 2013-02-01 TRUE 9.666667
7: 2013-02-01 FALSE 9.000000
8: 2012-12-01 TRUE 10.000000
आप के रूप में देखें, यह मानों के साथ एक डेटा तालिका देता है, अपेक्षित के रूप में नहीं; मूल्य जहां portal == TRUE
और month == 2012-02-01
डुप्लीकेट हैं, उदाहरण के लिए।
दिलचस्प बात यह है कि अगर मैं यह सिर्फ 2013 के डाटा की सीमा है, सब कुछ उम्मीद के रूप में काम करता है:
> data[month >= ymd(20130101), mean(satisfaction), by = 'month,portal']
month portal V1
1: 2013-01-01 TRUE 10.000000
2: 2013-01-01 FALSE 10.000000
3: 2013-02-01 TRUE 9.545455
4: 2013-02-01 FALSE 9.000000
मैं परे हैरान हूं मानना है :)। क्या कोई मेरी मदद कर सकता है?
'by = list (month, portal) ' – Andrie
का उपयोग करें सबसे पहले,' डेटा [, मतलब (संतुष्टि), = सूची (माह, पोर्टल) द्वारा]' वही (गलत) परिणाम उत्पन्न करता है। दूसरा, 'data.table' मदद के अनुसार, दोनों सिंटैक्स समर्थित हैं:" द्वारा - एक एकल अनगिनत कॉलम नाम, स्तंभ नामों के अभिव्यक्तियों की एक सूची(), एक एकल वर्ण स्ट्रिंग जिसमें अल्पविराम से अलग कॉलम नाम होते हैं, या एक वर्ण वेक्टर कॉलम नाम" –
अपने POSIX कॉलम को दिनांक (' as.Date') में कनवर्ट करना प्रतीत होता है। मुझे लगता है कि डेटा.table है (सही ढंग से? गलत है?) कुछ बाल विभाजित हैं या नहीं, इनमें से कुछ तिथियां "बराबर" हैं। – joran