Я хотел бы нарезать все n элементы списка, cbind
фрагмент, а затем rbind
фрагменты.
Я могу сделать это с помощью приведенного ниже кода (n = 10 элементов, список длиной 30 элементов). Я «вручную» выбираю каждые 10 элементов списка, а затем cbind
эти 10 фрагментов элементов. Затем я rbind
эти cbind
ed ломтики.
Тем не менее, я думаю, что может быть путь к этому с l*ply
в plyr
или dplyr
, или, по крайней мере, в некоторых из них. Во-первых, я сейчас не знаю, как выбрать все n элементы списка, и, похоже, не знаю подходящего условия поиска, чтобы найти этот ответ.
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)
do.call(mapply, c(cbind, split(dl, cut(seq_along(dl), 3))))
- person Steven Beaupré   schedule 27.07.2015do.call(rbind, lapply(split(dl, rep(1:(length(dl)%/%10), each=10)), simplify2array))
- person Rorschach   schedule 27.07.2015Levels: (0.971,10.7] (10.7,20.3] (20.3,30]
в зависимости от количества элементов в списке, разделите список с помощью этих сокращений и свяжите их в список списков, а затем выполните сопоставление, «rbinds» эти списки. - person nofunsally   schedule 27.07.2015dplyr
и первой части вашего вопроса см.row_number
--dl %>% group_by(row_number() %/% 10)
. Это будет после преобразования dl в data.frame, возможно, черезdata.frame(t(matrix(unlist(dl), 7)))
- person user295691   schedule 27.07.2015