Tôi muốn cắt từng thành phần n của danh sách, cbind
lát cắt và sau đó rbind
các lát cắt.Tách danh sách mọi thành phần và phần tử n, sau đó rách các lát
Tôi có thể thực hiện điều này bằng mã bên dưới (n = 10 phần tử, danh sách dài 30 phần tử). Tôi 'theo cách thủ công' chọn mỗi 10 phần tử trong danh sách và sau đó là cbind
10 phần tử này. Sau đó, tôi rbind
các lát cắt cbind
đó.
Tuy nhiên, tôi nghĩ rằng có thể có cách này với l*ply
trong plyr
hoặc dplyr
hoặc ít nhất một số trong số đó. Đối với người mới bắt đầu, tôi không phải bây giờ cách chọn mọi thành phần trong danh sách n và dường như không biết cụm từ tìm kiếm thích hợp để tìm câu trả lời này.
dl <- list(c(2L, 1L, 3L, 2L, 1L, 1L, 3L), c(1L, 1L, 2L, 1L, 1L, 2L,
1L), c(1L, 1L, 2L, 2L, 3L, 3L, 3L), c(1L, 1L, 2L, 2L, 3L, 3L,
3L), c(1L, 1L, 2L, 2L, 3L, 3L, 3L), c(1L, 1L, 2L, 2L, 3L, 3L,
1L), c(1L, 1L, 2L, 2L, 3L, 3L, 3L), c(1L, 3L, 2L, 1L, 3L, 2L,
1L), c(3L, 1L, 2L, 3L, 3L, 1L, 3L), c(3L, 2L, 1L, 1L, 3L, 3L,
1L), c(1L, 1L, 2L, 2L, 2L, NA, NA), c(1L, 1L, 2L, 2L, 3L, NA,
NA), c(1L, 1L, 2L, 2L, 3L, NA, NA), c(1L, 1L, 2L, 2L, 3L, NA,
NA), c(1L, 1L, 2L, 2L, 3L, NA, NA), c(1L, 1L, 2L, 2L, 3L, NA,
NA), c(1L, 1L, 2L, 2L, 3L, NA, NA), c(1L, 1L, 2L, 2L, 3L, NA,
NA), c(1L, 1L, 2L, 2L, 3L, NA, NA), c(2L, 1L, 2L, 1L, 1L, NA,
NA), c(2L, 3L, 1L, 2L, 1L, 2L, NA), c(1L, 1L, 2L, 2L, 1L, 3L,
NA), c(1L, 1L, 2L, 2L, 3L, 3L, NA), c(1L, 1L, 2L, 2L, 3L, 3L,
NA), c(1L, 1L, 2L, 2L, 3L, 3L, NA), c(1L, 1L, 2L, 2L, 3L, 3L,
NA), c(1L, 1L, 2L, 2L, 3L, 3L, NA), c(1L, 1L, 2L, 2L, 3L, 3L,
NA), c(1L, 1L, 2L, 2L, 3L, 3L, NA), c(1L, 1L, 2L, 2L, 3L, 3L,
NA))
# slice list 'manually' cbind those slices
dl1 <- dl[1:10]
dl1.c <- do.call("cbind", dl1)
dl2 <- dl[11:20]
dl2.c <- do.call("cbind", dl2)
dl3 <- dl[21:30]
dl3.c <- do.call("cbind", dl3)
# rbind the cbind slices for result
ans <- as.data.frame(rbind(dl1.c, dl2.c, dl3.c)) # ans as df
# ans <- rbind(dl1.c, dl2.c, dl3.c)
lẽ 'do.call (mapply, c (cbind, tách (dl, cắt (seq_along (dl), 3)))) ' –
cũng' do.call (rbind, lapply (split (dl, rep (1: (length (dl)% /% 10), mỗi = 10)), simplify2array)) ' – jenesaisquoi
@ StevenBeaupré dòng mã này dẫn đến kết quả mong muốn. Đối với sự hiểu biết của tôi, điều này sẽ 3 phần bằng nhau (tức là 'Cấp độ: (0,971,10,7] (10,7,20,3] (20,3,30]' dựa trên số lượng các phần tử trong danh sách, danh sách chia tách với những vết cắt đó và cbind chúng vào danh sách các danh sách, sau đó ánh xạ, 'rbinds' các danh sách đó – nofunsally