मैं reshape2::melt
का एक लंबे समय तक गैर-मानक तरीके से उपयोगकर्ता रहा हूं: मैं संख्यात्मक प्रयोग चला रहा हूं और परिणामस्वरूप मैट्रिक्स प्राप्त कर रहा हूं। मैं फिर इसे पिघला और कुछ छवियों का उत्पादन।tidyr :: इकट्ठा बनाम reshape2 :: matrices पर पिघला
reshape2
और tidyr
के बीच प्रेरित, अब मैं कक्षा मैट्रिक्स की वस्तुओं पर समान आउटपुट प्राप्त करने की कोशिश कर रहा हूं। कोई भाग्य अब तक:
library(reshape2)
library(tidyr)
set.seed(42)
mat <- matrix(runif(6), 3)
mat2 <- mat
colnames(mat2) <- letters[1:2]
rownames(mat2) <- letters[3:5]
melt(mat)
melt(mat2)
gather(mat) # fails
gather(mat2) # fails
ध्यान दें कि melt
चालाक है और dimnames
रहता है अगर वे मौजूद हैं। मैं how it works सीखा है, तो मैं संभवतः विधि प्रेषण के लिए निम्न समारोह जोड़ सकते हैं:
gather.matrix <- function(mat) {
if (is.null(dimnames(mat))) {
grid <- expand.grid(seq.int(nrow(mat)), seq.int(ncol(mat)))
} else {
grid <- expand.grid(dimnames(mat))
}
cbind(grid, value = as.vector(mat))
}
all.equal(melt(mat),
gather.matrix(mat))
#[1] TRUE
all.equal(melt(mat2),
gather.matrix(mat2))
#[1] TRUE
लेकिन सवाल है, मैं अपने मामले में melt
के रूप में एक ही तरीके से gather
अधिनियम मजबूर कर सकते हैं? क्या पैरामीटर का कोई संयोजन है जो वांछित आउटपुट mat
और mat2
पर उत्पादन करेगा?
dplyr के साथ संयोजन में "और" dplyr "" डेटा फ्रेम के साथ काम करने के लिए उपकरण पर केंद्रित है ", मुझे लगता है कि आप 'पिघला' के साथ चिपकने से बेहतर हो सकते हैं (क्योंकि 'इकट्ठा' वैसे भी 'पिघलने' के लिए एक रैपर लगता है)। – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto मैं वास्तव में ऐसा करने के इच्छुक हूं, बस सोच रहा हूं कि मुझे कुछ स्पष्ट याद आ रही है :) – tonytonov
यदि कोई 'इकट्ठा' विधि वास्तव में जरूरी है, तो मुझे लगता है कि खुद को फिर से लिखना चाहिए और बस 'collect.matrix <- reshape2 ::: melt.matrix' .... :-) – A5C1D2H2I1M1N2O1R2T1