2012-04-03 17 views
9

मुझे डेटा.फ्रेम बनाना होगा जो लूप के परिणामों के द्वारा एक समय में एक पंक्ति को पॉप्युलेट करेगा। इसमें 45 कॉलम हैं: इनमें से पांच का नाम स्थैतिक है लेकिन बाकी को रन टाइम पर बाहरी सीएसवी फ़ाइल से (वेक्टर के रूप में) पढ़ा जाता है। मैंगतिशील रूप से असाइन किए गए कॉलम नामों के साथ आर में डेटा.फ्रेम बनाएं

goalsMenu <- read.csv("Phase 1 goalsmenu.csv", header = TRUE) 
colHeads <- c("analysis","patient","date",as.vector(goalsMenu$Name),"CR") 
output <- data.frame(colHeads) 

की तर्ज पर कुछ के लिए देख रहा हूँ लेकिन इस colHeads के स्तंभ नाम के साथ एक एक-स्तंभ data.frame पैदा करता है।

colHeads <- list("analysis","patient","date",as.vector(goalsMenu$Name),"CR") 

सही दिशा में एक कदम लगता है, लेकिन मैं "समतल" की जरूरत है यह वांछित data.frame संरचना

बनाने के लिए आप कृपया सलाह देने के लिए कर सकता है?

+0

प्रत्येक कॉलम को कौन सी कक्षा की आवश्यकता है? – mdsumner

उत्तर

8

इस मदद करता है

col.names <- LETTERS[1:10] # Example column names 
data <- vector("list", length(col.names)) 
names(data) <- col.names 
print(str(data))   # Inspect the structure 

आशा: अन्यथा, आप पहली सूची बनाने के लिए होगा (और फिर बाद में data.frame में कनवर्ट करें)?

goalsMenu <- paste("Name", 1:40, sep="") 
output <- as.data.frame(matrix(rep(0, 5 + length(goalsMenu)), nrow=1)) 
names(output) <- c("analysis", "patient", "date", goalsMenu, "CR1", "CR2") 

असल में, मैं स्तंभों की संख्या के साथ एक data.frame output पहले बना सकते हैं और अगले चरण में उन स्तंभों को नाम दें। हालांकि, mdsumner की टिप्पणी के बारे में जागरूक रहें! इस तरह, सभी कॉलम numeric वर्ग के हैं। आप बाद में इसके साथ सौदा कर सकते हैं हालांकि: change the class of columns in data.frame

+0

धन्यवाद - यह काम किया है (हालांकि बाद में पहली बार-शून्य पंक्ति को बाहर करना है)। अपवाद के साथ (जैसा कि आप उम्मीद करेंगे) सभी कॉलम संख्यात्मक (पहले दो पूर्णांक संदर्भ संख्या; बाकी सभी फ्लोट) –

+0

@RobForsyth चूंकि आपने कहा था कि आप उस डेटा को भरने के लिए पंक्तियों के माध्यम से लूप कर रहे हैं। फ्रेम, मैं आपको लगता है कि आपको बस पंक्ति के साथ शुरू करना होगा और वहां शून्यों को प्रतिस्थापित करना होगा। साथ ही, यह स्वचालित रूप से कॉलम क्लास को ओवरराइट करना चाहिए। क्या आपका प्रश्न तब उत्तर दिया गया है? या आप कुछ और ढूंढ रहे हैं? यदि यह पूर्व है, तो यह अच्छा होगा अगर आप मेरा या एलन का जवाब स्वीकार कर सकें, तो यह एक ऑफ-लिस्ट है। अन्यथा, अगर आप अधिक जानकारी दे सकते हैं तो यह बहुत अच्छा होगा और मैं इसे एक और कोशिश दे सकता हूं ;-) या शायद किसी और के पास एक बेहतर समाधान है (मुझे लगता है कि एक है)। –

+0

क्षमा करें - Stackoverflow शिष्टाचार के लिए नया! अब उत्तर दिया गया: धन्यवाद फिर से! –

5

यदि आप पहले (कुछ) डेटा के साथ फ्रेम भर सकते हैं, तो आप केवल नाम() को असाइन कर सकते हैं। इस में मदद करता है

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