Мы проверяем lengths
из list
, получаем длину max
('mx'), основываясь на том, что добавляем paramlist2
элементы, которые имеют меньшую длину, с NA
, stack
кдва столбца data.frame
, fill
NA
элементов с соседними элементами, не являющимися NA, сгруппированными по «ind», создают столбец последовательности, а затем summarise
«ind» и «value» по paste
с элементами, сгруппированными по 'n'
library(tidyverse)
fn1 <- function(lst) {
mx <- max(lengths(lst))
map(lst, `length<-`, mx) %>%
stack %>%
fill(values) %>%
group_by(ind) %>%
mutate(n = row_number()) %>%
group_by(n) %>%
summarise(val = paste(ind, "=", values, collapse= "&", sep=""))
}
fn1(paramlist2)
# A tibble: 2 x 2
# n val
# <int> <chr>
#1 1 a=1&b=2&c=3&d=5
#2 2 a=1&b=2&c=4&d=6
На другом list
с разными length
каждого элемента 1, 2 и 3.
paramlist3 <- list(a = "1", b = "2", c = c("3", "4", "6"), d = c("5", "6"))
fn1(paramlist3)
# A tibble: 3 x 2
# n val
# <int> <chr>
#1 1 a=1&b=2&c=3&d=5
#2 2 a=1&b=2&c=4&d=6
#3 3 a=1&b=2&c=6&d=6
Здесь,мы предполагаем, что последний не-NA элемент повторяется, чтобы отрегулировать длину