यहाँ एक और तरीका यह करना है:
# split the data by group then apply spearman correlation
# to each element of that list
j <- lapply(split(df, df$group), function(x){cor(x[,2], x[,3], method = "spearman")})
# Bring it together
data.frame(group = names(j), corr = unlist(j), row.names = NULL)
मेरी विधि, जोश की विधि की तुलना करना, और plyr समाधान rbenchmark का उपयोग कर:
Dason <- function(){
# split the data by group then apply spearman correlation
# to each element of that list
j <- lapply(split(df, df$group), function(x){cor(x[,2], x[,3], method = "spearman")})
# Bring it together
data.frame(group = names(j), corr = unlist(j), row.names = NULL)
}
Josh <- function(){
r <- by(df, df$group, FUN = function(X) cor(X$var1, X$var2, method = "spearman"))
data.frame(group = attributes(r)$dimnames[[1]], corr = as.vector(r))
}
plyr <- function(){
ddply(df, .(group), summarise, "corr" = cor(var1, var2, method = "spearman"))
}
library(rbenchmark)
benchmark(Dason(), Josh(), plyr())
कौन सा उत्पादन देता
> benchmark(Dason(), Josh(), plyr())
test replications elapsed relative user.self sys.self user.child sys.child
1 Dason() 100 0.19 1.000000 0.19 0 NA NA
2 Josh() 100 0.24 1.263158 0.22 0 NA NA
3 plyr() 100 0.51 2.684211 0.52 0 NA NA
तो ऐसा लगता है कि मेरी विधि थोड़ा तेज़ है लेकिन ज्यादा नहीं। मुझे लगता है कि जोश की विधि थोड़ा और सहज है। प्लीयर समाधान कोड करने के लिए सबसे आसान है लेकिन यह सबसे तेज़ नहीं है (लेकिन यह निश्चित रूप से बहुत सुविधाजनक है)!
त्वरित उत्तर के लिए जोश धन्यवाद। वे सब काम किया !!! ;-) – user1009166
(+1) अच्छा जवाब। 'आर <- द्वारा (डीएफ, डीएफ $ समूह, FUN = फ़ंक्शन (एक्स) कोर (डीएफ [, - 1], विधि =" spearman ") के बारे में क्या? – MYaseen208
@ MYaseen208। धन्यवाद। आपके द्वारा दिया गया कोड कुछ अलग देता है। मुझे इसका नाम पता नहीं है, लेकिन यह प्रत्येक सेल में एक सहसंबंध के अलावा, एक भिन्नता-कॉन्वर्सिस मैट्रिक्स की तरह है। कोड जो मैंने प्रत्येक समूह के लिए एक एकल स्केलर सहसंबंध के बजाय रिटर्न का उपयोग किया था। –