2013-10-09 11 views
21

में कनवर्ट करना मुझे एक बहु-पंक्ति दो-कॉलम data.frame को किसी नामित वर्ण वेक्टर में परिवर्तित करने की आवश्यकता है।एक डेटा फ्रेम के दो स्तंभों को एक नामित वेक्टर

dd = data.frame(crit = c("a","b","c","d"), 
       name = c("Alpha", "Beta", "Caesar", "Doris") 
       ) 

और क्या मैं वास्तव में होगा की जरूरत है::

whatiwant = c("a" = "Alpha", 
       "b" = "Beta", 
       "c" = "Caesar", 
       "d" = "Doris") 

उत्तर

34

names समारोह का उपयोग करें: मेरे data.frame की तरह कुछ हो सकता है,

whatyouwant <- as.character(dd$name) 
names(whatyouwant) <- dd$crit 

as.character आवश्यक है, क्योंकि data.frame और read.table डिफ़ॉल्ट सेटिंग्स के साथ कारकों में कारकों को बदल दें।

आप एक लाइनर चाहते हैं:

whatyouwant <- setNames(as.character(dd$name), dd$crit) 
11

आप dd$name से एक सदिश कर सकते हैं और names() का उपयोग कर नाम जोड़ने, लेकिन आप structure() साथ एक ही चरण में यह सब कर सकते हैं:

whatiwant <- structure(as.character(dd$name), names = as.character(dd$crit)) 
4

किस्म के लिए, split और unlist कोशिश:

unlist(split(as.character(dd$name), dd$crit)) 
#  a  b  c  d 
# "Alpha" "Beta" "Caesar" "Doris" 
+0

यह इंगित किया जाना चाहिए कि इससे डुप्लिकेट नाम उन्हें संख्या में जोड़कर अद्वितीय बनाते हैं। यह बड़े वैक्टरों के साथ भी बहुत कुशल नहीं है। – Roland

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