2015-11-29 10 views
5

में दो कॉलम के माध्य की गणना करें मेरे पास अलग-अलग मानों को संग्रहित करने वाला डेटाफ्रेम है। नमूना:डेटाफ्रेम

a$open a$high a$low a$close 

1.08648 1.08707 1.08476 1.08551 
1.08552 1.08623 1.08426 1.08542 
1.08542 1.08572 1.08453 1.08465 
1.08468 1.08566 1.08402 1.08554 
1.08552 1.08565 1.08436 1.08464 
1.08463 1.08543 1.08452 1.08475 
1.08475 1.08504 1.08427 1.08436 
1.08433 1.08438 1.08275 1.08285 
1.08275 1.08353 1.08275 1.08325 
1.08325 1.08431 1.08315 1.08378 
1.08379 1.08383 1.08275 1.08294 
1.08292 1.08338 1.08271 1.08325 

मुझे क्या करना चाहते हैं, तो एक नया स्तंभ a$meana$high और प्रत्येक पंक्ति के लिए a$low की औसत भंडारण पैदा कर रही है।

यहाँ मैं कैसे हासिल की है कि:

highlowmean <- function(highs, lows){ 
    m <- vector(mode="numeric", length=0) 
    for (i in 1:length(highs)){ 
    m[i] <- mean(highs[i], lows[i]) 
    } 
    return(m) 
} 

a$mean <- highlowmean(a$high, a$low) 

हालांकि मैं थोड़ा अनुसंधान में और सामान्य रूप से functionnal भाषाओं में नया हूँ, इसलिए मैं बहुत यकीन है कि करने के लिए एक अधिक कुशल/आसान तरीका है कि वहाँ हूँ इसे प्राप्त करें।

यह सबसे बढ़िया तरीका कैसे प्राप्त करें?

उत्तर

5

दो संख्याओं का माध्य आप वास्तव में किसी भी विशेष कार्य की जरूरत नहीं है के लिए:

a$mean = (a$high + a$low)/2 

इस तरह के एक आसान मामले के लिए, यह apply या rowMeans का उपयोग करने के लिए किसी भी matrix रूपांतरण बचा जाता है।

11

हम rowMeans

a$mean <- rowMeans(a[c('high', 'low')], na.rm=TRUE) 

नोट का उपयोग कर सकते हैं: अगर वहाँ मूल्यों एनए हैं, यह rowMeans

उपयोग करने के लिए उदाहरण

a <- data.frame(High= c(NA, 3, 2), low= c(3, NA, 0)) 
rowMeans(a, na.rm=TRUE)  
#[1] 3 3 1 

के लिए बेहतर है और +

a1 <- replace(a, is.na(a), 0) 
(a1[1] + a1[2])/2 
# High 
#1 1.5 
#2 1.5 
#3 1.0 
का उपयोग कर

नोट: यह अन्य उत्तर को खराब करने की कोशिश करने का कोई तरीका नहीं है। यह ज्यादातर मामलों में काम करता है और साथ ही तेज़ भी है।

+0

पंक्तिमेन का उपयोग न करने का व्यवहार क्या होगा? एनए 0 के रूप में लिया जाएगा? – Lovy

+3

@LoveMetal बस इस 'माध्य (सी (3, एनए), na.rm = TRUE)' और '(3 + 0)/2' की जांच करें – akrun