2015-10-16 43 views
6

Tôi đang cố gắng tìm hiểu cách thêm dữ liệu.khoặc data.table vào vị trí đầu tiên trong danh sách.Nối khung dữ liệu vào danh sách

Lý tưởng nhất, tôi muốn có một danh sách cấu trúc như sau:

List of 4 
$ :'data.frame': 1 obs. of 3 variables: 
    ..$ a: num 2 
    ..$ b: num 1 
    ..$ c: num 3 
$ d: num 4 
$ e: num 5 
$ f: num 6 

Lưu ý data.frame là một đối tượng trong cấu trúc của danh sách.

Vấn đề là tôi cần phải thêm khung dữ liệu vào danh sách sau khi danh sách đã được tạo và khung dữ liệu phải là phần tử đầu tiên trong danh sách. Tôi muốn làm điều này bằng một cái gì đó đơn giản như append, nhưng khi tôi cố gắng:

append(list(1,2,3),data.frame(a=2,b=1,c=3),after=0) 

tôi nhận được một danh sách có cấu trúc:

str(append(list(1,2,3),data.frame(a=2,b=1,c=3),after=0)) 
List of 6 
$ a: num 2 
$ b: num 1 
$ c: num 3 
$ : num 1 
$ : num 2 
$ : num 3 

Dường như R được ép buộc data.frame thành một danh sách khi tôi đang cố gắng append. Làm thế nào để ngăn chặn nó làm như vậy? Hoặc phương pháp thay thế nào có thể có để xây dựng danh sách này, chèn data.frame vào danh sách ở vị trí 1, sau khi tạo danh sách ban đầu.

+0

Richard, Đây không phải là những gì tôi đang cố gắng làm. Tôi đang cố gắng thêm một đối tượng vào danh sách đã được xác định. Có, tôi có thể xác định lại toàn bộ danh sách, nhưng tôi đã hy vọng không cần phải làm điều đó. Những gì tôi muốn làm là để chèn một đối tượng vào một danh sách với càng ít rắc rối càng tốt. Danh sách này khá dài và tôi không muốn cơ cấu lại toàn bộ danh sách theo cách đó. Tôi thấy quan điểm của bạn về việc sử dụng phụ thêm như được thiết kế cho vectơ, nhưng có vẻ như có một hàm tương ứng cho các danh sách, phải không? – Tom

+0

Điều đó xảy ra! Bạn có thể di chuyển nhận xét của mình thành câu trả lời để tôi có thể đánh dấu nhận xét đó là đã chọn không? – Tom

+0

Tiêu đề tốt hơn có thể là "thêm vào danh sách" hoặc nội dung nào đó. Điều này dường như không liên quan đến data.table cụ thể, cũng không thực sự phụ thêm. – Frank

Trả lời

10

Vấn đề bạn đang gặp phải là đặt khung dữ liệu ở bất kỳ đâu vào danh sách dưới dạng một phần tử danh sách duy nhất, nó phải được bao bọc với list(). Chúng ta hãy có một cái nhìn.

df <- data.frame(1, 2, 3) 
x <- as.list(1:3) 

Nếu chúng ta chỉ quấn với c(), đó là những gì append() đang làm dưới mui xe, chúng tôi nhận

c(df) 
# $X1 
# [1] 1 
# 
# $X2 
# [1] 2 
# 
# $X3 
# [1] 3 

Nhưng nếu chúng ta quấn nó trong list() chúng tôi nhận được yếu tố danh sách mong muốn chứa khung dữ liệu .

list(df) 
# [[1]] 
# X1 X2 X3 
# 1 1 2 3 

Vì vậy, vì x đã là danh sách, chúng tôi sẽ cần sử dụng cấu trúc sau.

c(list(df), x) ## or append(x, list(df), 0) 
# [[1]] 
# X1 X2 X3 
# 1 1 2 3 
# 
# [[2]] 
# [1] 1 
# 
# [[3]] 
# [1] 2 
# 
# [[4]] 
# [1] 3 
+0

Điều này làm việc rất tốt. Cảm ơn. FWIW nó cũng có vẻ chơi tốt với data.table quá. – Tom

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