Combine two lists in a dataframe in R

This is another option:

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

Maybe there is a more elegant way that keeps the class numeric of list2's elements... But this one works as well

df <- do.call(rbind,mapply(cbind, listA, listB))
df <- as.data.frame(df, stringsAsFactors = FALSE)
df[,2] <- as.numeric(df[,2])

EDIT Way better is Matthew Plourde's solution using Map aka mapply(data.frame, A=listA, B=listB, SIMPLIFY = FALSE)


Another way without using do.call:

cbind(data.frame(listA), data.frame(listB))

If looking for a tidyverse solution, here is the analogue to the accepted answer. Using the dfr suffix to the map function family enables a very simple solution which should also be faster than do.call("rbind").

library(tidyverse)
listA <- list(c("a","b","c"), c("d","e"))
listB <- list(0.05, 0.5)

map2_dfr(listA, listB, ~ tibble(A = .x, B = .y))
#> # A tibble: 5 x 2
#>   A         B
#>   <chr> <dbl>
#> 1 a      0.05
#> 2 b      0.05
#> 3 c      0.05
#> 4 d      0.5 
#> 5 e      0.5

Created on 2019-02-12 by the reprex package (v0.2.1)