Tôi có một danh sách liệt kê tên của các hình thức sau đây từ một đối tượng JSON:danh sách liệt kê tên để data.frame
my_list = list(list(a = 10, b = "blah"),
list(a = 15, b = "stuff"))
Mỗi phần tử của danh sách bên ngoài là một danh sách tên và tôi muốn chuyển đổi nó vào một data.frame của biểu mẫu sau có tên cột nguyên vẹn:
a b
10 "blah"
15 "stuff"
Trên bề mặt, tôi có thể đạt được điều này bằng cách thực hiện to_df = data.frame(do.call(rbind, my_list))
.
Tuy nhiên, nếu tôi là để cố gắng trích xuất một cột cá nhân sử dụng to_df$a
hoặc to_df[,1]
tôi sẽ nhận được một danh sách thay vì một vector như bình thường mong đợi từ một data.frame:
> to_df[,1]
[[1]]
[1] 10
[[2]]
[1] 15
Thay vì:
> to_df[,1]
[1] 10 15
Bài đăng cũ trên danh sách gửi thư R đề xuất giải pháp sau: to_df = as.data.frame(t(sapply(my_list, rbind)))
. Nhưng không chỉ điều này không chuyển qua các tên cột, nó vẫn có cùng một vấn đề trả về một danh sách thay vì một vector khi nhìn vào các cột riêng lẻ sử dụng to_df[,1]
.
Cách tốt nhất để đạt được điều này là gì? Có cách nào dplyr
không?
EDIT: Cảm ơn tất cả các giải pháp, xuất hiện mẹo là lapply
và chuyển đổi từng thành phần của danh sách thành data.frame
và sau đó liên kết chúng với nhau bằng dplyr hoặc do.call
. Ngoài ra, data.table
thực hiện hầu hết công việc với một cuộc gọi đến rbindlist
.
Bạn có thể thử 'lapply (my_list, data.frame)%>% bind_rows()' –
Bạn có một số giải pháp khả thi bên dưới. Nhưng bạn nên lưu ý rằng 'to_df = data.frame (do.call (rbind, my_list))' không xuất hiện để cung cấp cho bạn một 'data.frame'. Nó xuất hiện để cung cấp cho bạn một 'danh sách' dựa trên đầu ra bạn hiển thị. –