2012-04-03 35 views
9

ile R'de bir data.frame oluşturun For for döngüsünün sonuçlarıyla her seferinde bir satırın doldurulacağı bir data.frame oluşturmam gerekiyor. 45 sütunu vardır: bunların beşi statiktir, ancak kalan kısım çalışma zamanında harici bir CSV dosyasından (vektör olarak) okunur. BenDinamik olarak atanan sütun adları

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

çizgisinde bir şey arıyorum ancak bu colHeads sütun adıyla tek sütun data.frame oluşturur.

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

doğru yönde atılmış bir adım gibi görünüyor ama "düzleştirmek" için gerektiğinde kolayca lütfen tavsiyelerini almak istenilen data.frame yapısını

oluşturmak için?

+0

Her sütunun hangi sınıfa ait olması gerekir? – mdsumner

cevap

8

yardımcı bu yardımı mu?

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") 

Temelde, ilk sütun sayısı ile bir data.frame output oluşturmak ve bir sonraki adımda bu sütunları isim. Ancak, mdsumner'ın yorumundan haberdar olun! Bu şekilde, tüm sütunlar numeric sınıfındadır. Bununla başa çıkabilirsin: change the class of columns in data.frame

+0

Teşekkürler - bu işe yaradı (daha sonra ilk sıfır sırayı çıkarmak zorunda kalmasına rağmen). İstisna (beklediğiniz gibi) ile tüm sütunlar sayısal (ilk iki tamsayı referans numarası; geri kalan tüm float) –

+0

@RobForsyth Bu data.frame'i doldurmak için yine de satırlar arasında döngü yaptığınızı söylediğinizden, Sadece birinci sırayla başlamanız ve orada sıfırları değiştirmeniz gerektiğini düşünüyorum. Ayrıca, bu sütun sınıfının otomatik olarak üzerine yazmalıdır. Sorunuz o zaman cevaplandı mı? Yoksa başka bir şey mi arıyorsunuz? Eski olması durumunda, benimki ya da Allan'ın cevabını kabul ederseniz, bu iyi olur, yani bu liste dışıdır. Aksi takdirde, daha fazla ayrıntı verebilir ve ben başka bir deneyin verebilir, harika olurdu ;-) Veya başkasının daha iyi bir çözümü vardır (sanırım bir tane var). –

+0

Üzgünüz - Stackoverflow görgü kuralları için yeni! Şimdi işaretli cevaplandı: tekrar teşekkürler! –

5

Çerçeveyi önce (bazı) verilerle doldurabiliyorsanız, yalnızca adlar() atayabilirsiniz. Aksi takdirde, önce listesini yapmak gerekir (ve daha sonra data.frame dönüştür):

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

Umut bu

İlgili konular