2012-04-03 57 views
9

Tôi cần phải tạo một data.frame sẽ được điền một hàng tại một thời điểm bằng kết quả của vòng lặp for. Nó có 45 cột: tên của năm cột này là tĩnh nhưng phần còn lại được đọc (dưới dạng vectơ) từ tệp CSV bên ngoài vào thời gian chạy. Tôi đang tìm một thứ gì đó dọc theo các dòng củaTạo một data.frame trong R với các tên cột được gán động

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

tuy nhiên điều này tạo ra một dữ liệu một cột.chỉ với tên cột của colHeads.

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

dường như là một bước đi đúng hướng nhưng tôi cần phải "làm phẳng" nó để tạo ra các cấu trúc data.frame mong muốn

bạn có thể tư vấn cho xin vui lòng?

+0

Mỗi cột cần phải có những gì? – mdsumner

Trả lời

8

Liệu sự giúp đỡ này?

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

Về cơ bản, tôi tạo một data.frame output với số cột đầu tiên và đặt tên cho các cột đó trong bước tiếp theo. Tuy nhiên, hãy lưu ý về nhận xét của mdsumner! Bằng cách này, tất cả các cột thuộc lớp numeric. Sau này, bạn có thể giải quyết vấn đề đó: change the class of columns in data.frame

+0

Cảm ơn - điều này đã làm việc (mặc dù phải loại bỏ hàng đầu tiên bằng 0 sau đó). Với ngoại lệ (như bạn mong đợi) của ngày tất cả các cột là số (hai số nguyên tham chiếu đầu tiên, phần còn lại tất cả đều nổi) –

+0

@RobForsyth Vì bạn đã nói rằng bạn đang lặp qua các hàng anyways để điền vào data.frame đó, tôi nghĩ rằng bạn chỉ cần bắt đầu với hàng một và thay thế số 0 ở đó. Ngoài ra, điều này sẽ tự động ghi đè lên lớp cột. Câu hỏi của bạn có được trả lời sau đó không? Hay bạn đang tìm cái gì khác? Trong trường hợp đó là cũ, nó sẽ là tốt nếu bạn có thể chấp nhận câu trả lời của tôi hoặc của Allan, vì vậy đây là một danh sách. Nếu không, nó sẽ là tuyệt vời nếu bạn có thể cho biết thêm chi tiết và tôi có thể cung cấp cho nó một thử ;-) Hoặc có thể ai đó khác có một giải pháp tốt hơn (tôi đoán có một). –

+0

xin lỗi - mới đối với nghi thức Stackoverflow! Bây giờ đánh dấu trả lời: cảm ơn một lần nữa! –

5

Nếu trước tiên bạn có thể lấp đầy khung bằng (một số) dữ liệu, thì bạn chỉ có thể gán cho tên(). Nếu không, bạn sẽ phải làm cho danh sách đầu tiên (và sau đó chuyển đổi sang data.frame):

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

Hope this helps

Các vấn đề liên quan