में data.table का उपयोग कर मैं निम्नलिखित है डाटासेटजब आर
> head(DT)
V1 V2 V3 V4 V5 V6 V7
1: 2 1 2 0.91 0.02 880.00 1
2: 3 2 1 0.02 0.00 2.24 2
3: 1 1 1 0.15 0.01 3.41 3
4: 1 2 1 3.92 0.05 268.67 2
5: 1 1 2 0.10 0.01 1.59 3
6: 0 1 1 1.20 0.04 1.43 3
> sapply(DT, class)
V1 V2 V3 V4 V5 V6 V7
"integer" "integer" "integer" "numeric" "numeric" "numeric" "factor"
जो पंक्तियों के हजारों के लिए फैलता है एक त्रुटि लौटने माध्य।
> DT[, lapply(.SD, median), by = V7]
Error in `[.data.table`(DF, , lapply(.SD, median), by = V7) :
Column 1 of result for group 4 is type 'integer' but expecting type 'double'. Column types must be consistent for each group.
: मैं मैं निम्न आदेश है, जो एक त्रुटि देता है का उपयोग कर रहा फिलहाल कारक परिवर्तनीय V7
> levels(DT$V7)
[1] "1" "2" "3" "4" "5" "6" "7" "8"
द्वारा परिभाषित 8 समूहों के भीतर V1-वी 6 की औसत मूल्यों की गणना करने कोशिश कर रहा हूँ
मैंने कहीं पढ़ा है कि इसके आसपास एक रास्ता as.double(median(X))
का उपयोग कर रहा था। लेकिन इस अलग-अलग स्तंभों के लिए काम करता है: DT[, as.double(median(X)), by = V7]
, लेकिन नहीं जब सभी स्तंभों पर विचार के लिए: DT[, lapply(.SD, as.double(median)), by = V7]
(अपेक्षित रूप से, क्योंकि आप मंझला के लिए एक इनपुट पारित करने के लिए है)
मैं कुल
> aggregate(DT[,c(1:6), with = FALSE], by = list(DF$V7), FUN = median)
Group.1 V1 V2 V3 V4 V5 V6
1 1 0 1 1 1.285 0.04 401.500
2 2 1 2 1 3.565 0.06 6.400
3 3 0 1 1 0.360 0.03 11.200
4 4 1 1 1 74.290 0.26 325.960
5 5 2 1 0 1.145 0.04 1.415
6 6 0 1 1 10.100 0.18 93.000
7 7 1 1 0 0.740 0.04 1.080
8 8 1 1 0 7.970 0.40 0.050
का उपयोग करके आसपास पहुंच सकते हैं लेकिन मैं अगर वहाँ data.table
उपयोग हमेशा की तरह 'lapply' वाक्य रचना: (' lapply .SD, फ़ंक्शन (x) as.numeric (median (x))) '। 'Lapply' का दूसरा तर्क एक समारोह होना चाहिए। – Roland