Объединить два списка в фрейме данных в R
у меня есть два списка с различной структурой:
listA <- list(c("a","b","c"), c("d","e"))
listB <- list(0.05, 0.5)
listA
[[1]]
[1] "a" "b" "c"
[[2]]
[1] "d" "e"
listB
[[1]]
[1] 0.05
[[2]]
[1] 0.5
у меня есть идея, как использовать цикл для объединения обоих списков в фрейме данных, который выглядит как ниже, но я уверен, что есть более эффективный способ сделать это.
data.frame(A = c("a","b","c","d","e"), B = c(rep(0.05,3), rep(0.5,2)))
A B
1 a 0.05
2 b 0.05
3 c 0.05
4 d 0.50
5 e 0.50
4 ответов
еще один вариант:
do.call(rbind, Map(data.frame, A=listA, B=listB))
# A B
# 1 a 0.05
# 2 b 0.05
# 3 c 0.05
# 4 d 0.50
# 5 e 0.50
может быть есть более элегантный способ, который держит класс numeric
of list2
'S элементов... Но этот тоже работает!--6-->
df <- do.call(rbind,mapply(cbind, listA, listB))
df <- as.data.frame(df, stringsAsFactors = FALSE)
df[,2] <- as.numeric(df[,2])
редактировать лучше-это решение Матфея Плаурд с помощью Map
ака mapply(data.frame, A=listA, B=listB, SIMPLIFY = FALSE)
Я бы предпочел этот:
do.call(rbind,
Map(function(...) setNames(cbind.data.frame(...),
c("A", "B")),
listA, listB))
# A B
#1 a 0.05
#2 b 0.05
#3 c 0.05
#4 d 0.50
#5 e 0.50
вот еще один способ:
do.call(rbind,
lapply(1:length(listA),
function(i)
data.frame(A=unlist(listA[i]),
B=unlist(listB[i]))))