देता है मैं अपनी प्रयोगशाला में किसी निश्चित मानदंड के लिए पास दरों की गणना करने के लिए फ़ंक्शन को सत्यापित करने पर काम कर रहा हूं। इसके पीछे गणित बहुत ही सरल है: कई परीक्षणों को देखते हुए जो या तो पास हो गए या असफल रहे, किस प्रतिशत ने पारित किया।dplyr :: mutate x/y = NA देता है, संक्षेप में x/y = वास्तविक संख्या
डेटा मान हैं कि के एक स्तंभ के रूप में प्रदान किया जाएगा या तो P1
(पहला परीक्षण को पारित कर दिया), F1
(पहला परीक्षण पर विफल), P2
या F2
(पारित कर दिया या दूसरे टेस्ट में असफल रहा, क्रमशः)। मैंने कुल दर (पहली और दूसरी कोशिश) और पहले परीक्षण और अलगाव में दूसरे परीक्षण की गणना करने में सहायता के लिए नीचे passRate
फ़ंक्शन लिखा था।
गुणवत्ता विशेषज्ञ जिन्होंने सत्यापन के लिए पैरामीटर सेट अप किए हैं, मुझे पास की असफलता और असफल गणना मिली है जो मैं test_vector
फ़ंक्शन का उपयोग करके वेक्टर में परिवर्तित कर रहा हूं।
सब कुछ अच्छा लग रहा था जब तक कि मैं Pass
डेटा फ्रेम की तीसरी पंक्ति तक नहीं पहुंच पाया, जिसमें मेरे गुणवत्ता विशेषज्ञ से पास/असफल गणना शामिल है। 100% की दूसरे टेस्ट पास दर लौटने की बजाय, यह लागू नहीं देता है ... लेकिन केवल जब मैं mutate
library(dplyr)
Pass <- structure(list(P1 = c(2L, 0L, 10L),
F1 = c(0L, 2L, 0L),
P2 = c(0L, 3L, 2L),
F2 = c(0L, 2L, 0L),
id = 1:3),
.Names = c("P1", "F1", "P2", "F2", "id"),
class = c("tbl_df", "data.frame"),
row.names = c(NA, -3L))
तो यहाँ का उपयोग मैं mutate
साथ क्या किया था के लिए कुछ समान है।
Pass %>%
group_by(id) %>%
mutate(pass_rate = (P1 + P2)/(P1 + P2 + F1 + F2) * 100,
pass_rate1 = P1/(P1 + F1) * 100,
pass_rate2 = P2/(P2 + F2) * 100)
Source: local data frame [3 x 8]
Groups: id [3]
P1 F1 P2 F2 id pass_rate pass_rate1 pass_rate2
(int) (int) (int) (int) (int) (dbl) (dbl) (dbl)
1 2 0 0 0 1 100.00000 100 NA
2 0 2 3 2 2 42.85714 0 60
3 10 0 3 1 3 100.00000 100 NA
जब मैं का उपयोग summarise
Pass %>%
group_by(id) %>%
summarise(pass_rate = (P1 + P2)/(P1 + P2 + F1 + F2) * 100,
pass_rate1 = P1/(P1 + F1) * 100,
pass_rate2 = P2/(P2 + F2) * 100)
Source: local data frame [3 x 4]
id pass_rate pass_rate1 pass_rate2
(int) (dbl) (dbl) (dbl)
1 1 100.00000 100 NA
2 2 42.85714 0 60
3 3 100.00000 100 100
मैं अपेक्षा की होगी ये वही परिणाम देने के की तुलना करें। मेरा अनुमान है कि mutate
कहीं समस्याएं हैं क्योंकि यह मानता है कि n
प्रति समूह पंक्तियों को परिणाम में n
पंक्तियों पर नक्शा करना चाहिए (क्या यह n
की गणना में भ्रमित हो रहा है?), जबकि summarise
जानता है कि इससे कोई फर्क नहीं पड़ता कि यह कितनी पंक्तियां शुरू होती है, यह है केवल 1.
क्या किसी के पास इस विचार के पीछे यांत्रिकी क्या है इस पर कोई विचार है?
यह वास्तव में एक ठोस उदाहरण है। क्या आपके पास एक आसान तरीका है जो दिखाता है कि एक बग (आपके शीर्षक में) की तरह क्या लगता है? यहां सामान्य संदर्भ दिया गया है: [mcve] – Frank
आप सही हैं, मैंने इसे कम करने की कोशिश करने में अधिक समय नहीं लगाया था। मैंने सभी अतिरिक्त कार्यों के बिना परिणामों की सीधे गणना करने के लिए कोड डाला है। – Benjamin
एक बग की तरह लगता है: 'पास <- data.frame (पी 2 = सी (0,3,2), एफ 2 = सी (0,2,0), आईडी = 1: 3); पास%>% group_by (आईडी)%>% उत्परिवर्तन (पास 2 = पी 2/(पी 2 + एफ 2)) '। पंक्ति 3 – jeremycg