2011-07-25 13 views
9

मेरे पास एक डेटाफ्रेम है जिसमें मैं उस डेटाफ्रेम के अन्य मानों के लिए हैश कुंजी/डिक्शनरी कुंजियों (या जिसे आप अपनी पसंद की भाषा में कहते हैं) के रूप में कुछ मानों का उपयोग करना चाहते हैं। मैं इस तरह एक dataframe जो मैं एक बड़ी csv फ़ाइल (केवल पहली पंक्ति दिखाया गया है) से में पढ़ा है है कहना:मैं हैश कुंजी/शब्दकोश कुंजी/प्राथमिक कुंजी जैसे डेटाफ्रेम के तत्वों का उपयोग कैसे करूं?

Plate.name QN.number Well Allele.X.Rn Allele.Y.Rn Call 
1 Plate 1_A1 QN2200 A  1.766  2.791 Both 

जो आर कोड में होगा:

structure(list(Plate.name = structure(1L, .Label = "Plate 1_A1", class = "factor"), 
    QN.number = structure(1L, .Label = "QN2200", class = "factor"), 
    Well = structure(1L, .Label = "A1", class = "factor"), Allele.X.Rn = 1.766, 
    Allele.Y.Rn = 2.791, Call = structure(1L, .Label = "Both", class = "factor")), .Names = c("Plate.name", 
"QN.number", "Well", "Allele.X.Rn", "Allele.Y.Rn", "Call"), class = "data.frame", row.names = c(NA, 
-1L)) 

QN.numbers मेरे डेटासेट में अद्वितीय आईडी हैं। फिर मैं QN.number का उपयोग करके अन्य मानों के संदर्भ के रूप में डेटा पुनर्प्राप्त कैसे करूं, जिसका कहना है कि मैं किसी दिए गए QN.number के लिए कॉल या Allele.X.Rn जानना चाहता हूं? ऐसा लगता है कि पंक्ति। नाम चाल चल सकते हैं लेकिन फिर मैं इस उदाहरण में उनका उपयोग कैसे करूं?

+0

+1: आप एक से अधिक पंक्ति के नाम का इस्तेमाल कर सकते हैं उदाहरण और अच्छी तरह से पूछे जाने वाले सवाल। –

+0

डेटा फ्रेम में पंक्ति नामों को मुझे अद्वितीय होना चाहिए (जैसे हैश या डिक्शनरी में), ताकि आप पंक्ति.नाम() में QN.number का उपयोग करने से पहले उस चेक को करना चाहें। 'Sum (tapply (d $ a, d $ a, length)> 1) की तरह कुछ आपको बताएगा कि डेटा फ्रेम डी के कॉलम में कितने डुप्लिकेट हैं। – Seth

+0

आह हाँ धन्यवाद सेठ, मुझे यह उल्लेख करना चाहिए था कि QN.number एक अद्वितीय आईडी है। मैं – arandomlypickedname

उत्तर

5

का उपयोग row.names इस तरह है:

> row.names(d)=d$QN.number 
> d["QN2200",] 
     Plate.name QN.number Well Allele.X.Rn Allele.Y.Rn Call 
QN2200 Plate 1_A1 QN2200 A1  1.766  2.791 Both 
> d["QN2201",] 
    Plate.name QN.number Well Allele.X.Rn Allele.Y.Rn Call 
NA  <NA>  <NA> <NA>   NA   NA <NA> 

तुम बस subsetting में पहले पैरामीटर के रूप पंक्ति नाम का उपयोग करें। एक प्रतिलिपि प्रस्तुत करने योग्य के लिए

> d=data.frame(a=letters[1:10],b=runif(10)) 
> row.names(d)=d$a 
> d[c("a","g","d"),] 
    a   b 
a a 0.6434431 
g g 0.6724661 
d d 0.9826392 

अब मुझे यकीन है कि यह कैसे चतुर है नहीं कर रहा हूँ, और क्या यह प्रत्येक पंक्ति नाम या तेज अनुक्रमण के लिए अनुक्रमिक खोज करता है ...

+0

आपकी सहायता के लिए धन्यवाद – arandomlypickedname

0

यह मानते हुए कि हम एक चर नाम में हमारे डेटा फ्रेम भंडारण कर रहे हैं - मैं यह अब के लिए कॉल dataframe - निम्नलिखित यह करना चाहिए:

dataframe$Allele.X.Rn[which(dataframe$Qn.number == <whatever>)]

निश्चित रूप से कहाँ, <whatever> है वह संख्या जिसे आप Qn.number के लिए उपयोग करना चाहते हैं।

+1

प्रश्न संपादित करूंगा आपको कॉल को 'कौन सा' की आवश्यकता नहीं है; तार्किक अनुक्रमण ठीक है। –

+0

हू ... तो यह करता है। उसे इंगित करने के लिए धन्यवाद! –

+2

एक और विकल्प होगा: 'डेटाफ्रेम [डेटाफ्रेम $ QN.number == "QN2200", "Allele.Y.Rn"] '। –

4

subset का उपयोग करें।

subset(your_data, QN.number == "QN2200", Allele.X.Rn) 

with एक विकल्प प्रदान करता है; यहां आउटपुट एक अन्य डेटा फ्रेम के बजाय एक वेक्टर है।

with(your_data, Allele.X.Rn[QN.number == "QN2200"]) 
+0

मैं प्रदान किए गए सीमित परीक्षण डेटासेट पर काम करने के लिए सबसेट प्राप्त कर सकता हूं लेकिन मुझे वास्तविक डेटा सेट पर काम करने के लिए मेरे जीवन के लिए यह नहीं मिल सकता है: डरावनी "अपरिभाषित कॉलम चयनित" त्रुटि – arandomlypickedname

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