आर

2010-09-06 10 views
54

में एक dataframe के लिए एक स्तंभ जोड़ना मैं निम्नलिखित dataframe (df)आर

start  end 
1 14379 32094 
2 151884 174367 
3 438422 449382 
4 618123 621256 
5 698271 714321 
6 973394 975857 
7 980508 982372 
8 994539 994661 
9 1055151 1058824 
. .  . 
. .  . 
. .  . 

और संख्यात्मक मान (vec) के साथ एक लंबी वेक्टर है।

मैं प्रत्येक पंक्ति के vec में इसी स्थानों में एक और स्तंभ जोड़ने के लिए, मूल्यों का मतलब के साथ करना चाहते हैं। उदाहरण के लिए, पहली पंक्ति में mean(vec[14379:32094]) होगा। मैंने transform के साथ खेलने का प्रयास किया है लेकिन यह आसान कार्य पूरा करने में सक्षम नहीं था।

+1

मैं कार्यालय के बाहर एक पैर के साथ हूं और इतनी तेजी से उदाहरण के साथ नहीं आ सकता, लेकिन एफडब्ल्यूआईडब्ल्यू, देखें? आवेदन करें। –

उत्तर

71

apply() के लिए एक सुंदर मानक उपयोग के मामले है:

R> vec <- 1:10 
R> DF <- data.frame(start=c(1,3,5,7), end=c(2,6,7,9)) 
R> DF$newcol <- apply(DF,1,function(row) mean(vec[ row[1] : row[2] ])) 
R> DF 
    start end newcol 
1  1 2 1.5 
2  3 6 4.5 
3  5 7 6.0 
4  7 9 8.0 
R> 

तुम भी plyr उपयोग कर सकते हैं यदि आप चाहें, लेकिन यहाँ

+0

+1 धन्यवाद! पुन। 'प्लीयर '- अगर मैं प्रत्येक पंक्ति को स्वयं ही इलाज करना चाहता हूं तो मैं इसका उपयोग कैसे कर सकता हूं? –

+2

आप किसके बारे में बात कर रहे हैं? यह प्रत्येक अपने आप से व्यवहार करता है। यह और कैसे करेगा? –

+0

प्रत्येक क्या? जहां तक ​​मैं समझता हूं, पंक्तियों के समूह पर 'प्लीयर' काम करते हैं। –

-1

यहां तक ​​कि अगर वह आधार आर से कार्यों से परे जाने की कोई वास्तविक आवश्यकता है एक 7 साल का सवाल, आर के लिए नए लोगों को data.table, पैकेज का उपयोग करने पर विचार करना चाहिए।

एक डेटा.table एक डेटा.फ्रेम है, इसलिए आप डेटा/फ्रेम के लिए भी कर सकते हैं। आप भी कर सकते हैं। लेकिन कई लोग डेटा.table के साथ तेजी से परिमाण के आदेश हैं।

vec <- 1:10 
library(data.table) 
DT <- data.table(start=c(1,3,5,7), end=c(2,6,7,9)) 
DT[,new:=apply(DT,1,function(row) mean(vec[ row[1] : row[2] ]))] 
+0

यकीन नहीं है कि पृथ्वी पर क्यों मैं नीचे गिर गया ... हास्यास्पद – statquant