2012-01-24 27 views
8

में पंक्तियों में से न्यूनतम प्राप्त करना मैं डेटाफ्रेम के साथ काम कर रहा हूं जिसमें 65 चर हैं। पहला चर एक व्यक्ति को सूचीबद्ध करता है, और अगले 64 चर भौगोलिक दूरी को इंगित करते हैं कि वह व्यक्ति 64 स्थानों में से प्रत्येक से है। आर का उपयोग करके, मैं एक नया चर बनाना चाहता हूं जो प्रत्येक व्यक्ति के लिए उन 64 स्थानों में से एक के लिए सबसे छोटी दूरी सूचीबद्ध करता है।डेटा फ्रेम

उदाहरण के लिए: यदि व्यक्ति एक्स 35, 50, 79, 100, 450 ... स्थानों से मील दूर है, तो मैं चाहता हूं कि नया चर स्वचालित रूप से उन्हें 35 असाइन करें, क्योंकि यह सबसे छोटी दूरी है। इसके साथ किसी भी मदद की सराहना की जाएगी। धन्यवाद।

+0

डीएफ $ newvariable = लागू (डीएफ [, 2: 65], 1, मिनट) – aatrujillob

उत्तर

8
df <- data.frame(let=letters[1:25], d1=sample(1:25,25), d2=sample(1:25,25), d3=sample(1:25,25)) 

df$shortest <- apply(df[,2:4],1,min) 

दूसरी पंक्ति प्रत्येक पंक्ति में फ़ंक्शन मिनट लागू करती है और इसे मेरे डेटा.फ्रेम डीएफ में नए कॉलम पर असाइन करती है। दूसरी पंक्ति क्या कर रही है, इसके बारे में अधिक स्पष्टीकरण के लिए ?apply देखें। पहले कॉलम को छोड़ने के लिए सावधान रहें, या किसी भी कॉलम को दूरी पर न रखें:

apply(df,1,min) तारों के "मिनट" को ढूंढने के बाद से पूरी तरह से अंतर जवाब देता है।

> min(2:10) 
[1] 2 
> min(as.character(2:10)) 
[1] "10" 
4

मैं इसे लागू करने के साथ संपर्क करूंगा लेकिन परिवर्तन या अन्य दृष्टिकोण काम कर सकता है।

#fake data set 
ID=LETTERS[1:5], distance=matrixsample(
DF <- as.data.frame(matrix(sample(1:100, rep=T, 100), 5, 20)) 
DF <- data.frame(ID=LETTERS[1:5], DF) 

#solution 
DF$newvar <- apply(DF[,-1], 1, min) 
12

या, जस्टिन के उदाहरण का उपयोग:

df$shortest <- do.call(pmin,df[-1]) 

भी ?pmin और ?do.call देखते हैं, और (ध्यान दें कि आप सूची सूचकांकों का उपयोग करके अपने डेटा फ्रेम में पहली चर ड्रॉप कर सकते हैं कि इतने प्रयोग नहीं कर किसी भी कॉमा पर, ?Extract देखें)