में समूहवार निरंतर कॉलम का कुशलता से पता लगाएं I डेटा फ्रेम से समूहवार निरंतर कॉलम को कुशलतापूर्वक कैसे निकाला जा सकता है? मैंने सटीक बनाने के लिए नीचे एक प्लीयर कार्यान्वयन शामिल किया है जो मैं करने की कोशिश कर रहा हूं, लेकिन यह धीमा है। मैं इसे यथासंभव कुशलतापूर्वक कैसे कर सकता हूं? (आदर्श रूप से डेटा फ्रेम को विभाजित किए बिना)।डेटा-फ्रेम
base <- data.frame(group = 1:1000, a = sample(1000), b = sample(1000))
df <- data.frame(
base[rep(seq_len(nrow(base)), length = 1e6), ],
c = runif(1e6),
d = runif(1e6)
)
is.constant <- function(x) length(unique(x)) == 1
constant_cols <- function(x) head(Filter(is.constant, x), 1)
system.time(constant <- ddply(df, "group", constant_cols))
# user system elapsed
# 20.531 1.670 22.378
stopifnot(identical(names(constant), c("group", "a", "b")))
stopifnot(nrow(constant) == 1000)
मेरी वास्तविक उपयोग मामले में (गहरी ggplot2 के अंदर) वहाँ लगातार और गैर लगातार स्तंभों की एक मनमाना संख्या हो सकती है। उदाहरण में डेटा का आकार परिमाण के सही क्रम के बारे में है।
आप पहले से ही plyr उपयोग करके किसी भी शुद्ध आर कार्यान्वयन की तुलना में बेहतर कर रहे हैं। आईएमएचओ आप समूह द्वारा डीएफ को सॉर्ट करके (तेज़ तेज़) और फिर सी कोड में ब्रेक के लिए स्कैनिंग करके बेहतर कर सकते हैं। –
@ सिमॉन मैं प्लीयर के साथ किसी भी पंक्ति आधारित समाधान से बेहतर कर रहा हूं - मुझे लगता है कि यद्यपि एक चालाक कॉलम आधारित समाधान होना चाहिए। – hadley