एक और अविश्वसनीय रूप से तेजी से विधि max.col
साथ मैट्रिक्स निष्कर्षण [
गठबंधन करने के लिए है, जो एक रिटर्न
df[, "max"] <- apply(df[, 2:26], 1, max)
यहाँ एक बुनियादी उदाहरण है वेक्टर प्रत्येक पंक्ति में अधिकतम मूल्य की कॉलम स्थिति अनुक्रमणित करता है।
df$max <- df[2:26][cbind(seq_len(nrow(df)), max.col(df[2:26]))]
cbind
एक मैट्रिक्स प्रत्येक पंक्ति के लिए अधिकतम मूल्य की स्थिति का अनुक्रमण निर्माण करती है और [
इस का उपयोग करता है यह मान प्राप्त करने के।
चलिए कुछ बेंचमार्किंग करते हैं।
# data.frame with 1000 observations and 26 variables
set.seed(1234)
df <- data.frame(id=paste0(letters[-1], 1:40), matrix(rnorm(25000L, 5L, 10L), 1000L))
इसके अलावा मिश्रण करने के लिए matrixStats
पैकेज से rowMaxs
समारोह जोड़ें।
library(matrixStats)
library(microbenchmark)
microbenchmark(apply=apply(df[, 2:26], 1, max),
pmax=do.call(pmax, df[2:26]),
max.colSub=df[2:26][cbind(seq_len(nrow(df)), max.col(df[2:26]))],
rowMaxs=rowMaxs(as.matrix(df[2:26])))
Unit: microseconds
expr min lq mean median uq max neval cld
apply 1610.540 1786.5905 2193.5334 1863.5680 1990.4380 6915.999 100 c
pmax 354.382 364.6455 380.1720 373.3405 385.4580 567.923 100 a
max.colSub 604.416 651.7430 822.6015 664.7155 681.2510 3086.512 100 b
rowMaxs 243.762 264.0040 320.2350 277.9750 290.5190 2328.712 100 a
तो, rowMaxs
स्पष्ट विजेता pmax
द्वारा और फिर max.col
द्वारा पीछा किया, मैट्रिक्स निष्कर्षण के साथ, और apply
पैक 'के अंत में है।
10000 पंक्तियों और 26 कॉलम के साथ एक data.frame साथ
, हम इसी तरह की कहानी मिलती है:
set.seed(1234)
df <- data.frame(id=paste0(letters[-1], 1:400), matrix(rnorm(250000L, 5L, 10L), 10000L))
ऊपर कोड लौटाता है
Unit: milliseconds
expr min lq mean median uq max neval cld
apply 15.193361 18.299830 21.737516 20.337880 21.774793 99.44836 100 c
pmax 3.060853 3.101481 3.156630 3.137545 3.191430 3.54182 100 a
max.colSub 3.338828 3.642603 7.051700 3.992708 6.336531 84.43119 100 b
rowMaxs 1.244184 1.322302 2.675281 1.508474 1.638053 79.28054 100 a
क्या अगर मैं अधिकतम में स्तंभ का नाम चाहते हैं प्रत्येक पंक्ति के लिए .. उदाहरण के लिए डीएफ $ अधिकतम [1] = सी – syllogismos
क्या होगा यदि मुझे na.rm = TRUE जोड़ने की आवश्यकता है? – KillerSnail