2011-05-26 18 views
6

मेरे dataframe कई स्तंभ के रूप में निम्नानुसार है:स्तंभ बी में मानों की श्रेणी के आधार पर प्राप्त औसत स्तंभ एक

df1 <- data.frame(A = c(1,2,4), B=c(1,3,1), C=c(1,1,3)) 

मैं दो शर्तें स्तंभ ए के लिए औसत मूल्यों को प्राप्त करने के लिए है

  • स्थिति 1: जब बी 1 होता है, तो मैं कॉलम ए का औसत प्राप्त करना चाहता हूं, यानी केवल पंक्ति 1 और पंक्ति 2 औसत होगी।
  • हालत 2: मैं स्तंभ बी का औसत प्राप्त करना चाहता हूं जब कॉलम ए के मान 1 से बड़े होते हैं लेकिन 3 से छोटे होते हैं, यानी केवल पंक्ति 2 पर विचार किया जाएगा।

मुझे पता है कि मैं डेटाफ्रेम को केवल कॉलम बी = 1 रखने के लिए फ़िल्टर का उपयोग कर सकता हूं। हालांकि, मुझे यह सुनिश्चित नहीं है कि कॉलम बी को 1 और 3 के भीतर एक सीमा के रूप में माना जाना चाहिए।

क्या डेटा फ्रेम को छोटे आकार में कटौती किए बिना कॉलम के औसत मान प्राप्त करने के कोई भी स्मार्ट तरीके हैं प्रथम?

+0

: 'बी == 1' पंक्तियों 1 में तो तुम B > 1 परीक्षण B < 3 साथ जोड़ सकता और 3, 1 और 2 नहीं 2. क्या यह एक टाइपो है? – Chase

+2

"साथ" के उपयोग के लिए '? Cut' और' tapply' या '? Aggregate 'या ... –

उत्तर

2

आप & के साथ दो लॉजिकल परीक्षणों को जोड़ सकते हैं। mean ताकि तरह

# Condition A: 
mean(df1$A[df1$B==1]) 

# Condition B: 
mean(df1$B[df1$A>1 & df1$A<3]) 
7

आप एक ही कॉल में अपने subsetting कर सकते हैं:: शर्त 1 पर

with(df1, mean(A[B == 1])) 

with(df1, mean(B[A > 1 & A < 3])) 
+0

+1 देखें, जो df1 $ ए आदि से क्लीनर है। –

संबंधित मुद्दे