># 构造列表
> (a_list = list(
+ c(1, 1, 2, 5, 14, 42),
+ month.abb,
+ c(1, 1, 2, 5, 14, 42, 22,88, 0)))
# [[1]]
# [1] 1 1 2 5 14 42
#
# [[2]]
# [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
#
# [[3]]
# [1] 1 1 2 5 14 42 22 88 0
>
> do.call(cbind, lapply(lapply(a_list, unlist), `length<-`, max(lengths(a_list))))
# [,1] [,2] [,3]
# [1,] "1" "Jan" "1"
# [2,] "1" "Feb" "1"
# [3,] "2" "Mar" "2"
# [4,] "5" "Apr" "5"
# [5,] "14" "May" "14"
# [6,] "42" "Jun" "42"
# [7,] NA "Jul" "22"
# [8,] NA "Aug" "88"
# [9,] NA "Sep" "0"
# [10,] NA "Oct" NA
# [11,] NA "Nov" NA
# [12,] NA "Dec" NA
>
> #当给合并后的data.frame每一列的命名时,则必须使用函数"cbind.data.frame"
> setNames(do.call(cbind.data.frame, lapply(lapply(a_list, unlist), `length<-`, max(lengths(a_list)))), paste0("V", 1:3))
# V1 V2 V3
# 1 1 Jan 1
# 2 1 Feb 1
# 3 2 Mar 2
# 4 5 Apr 5
# 5 14 May 14
# 6 42 Jun 42
# 7 NA Jul 22
# 8 NA Aug 88
# 9 NA Sep 0
# 10 NA Oct NA
# 11 NA Nov NA
# 12 NA Dec NA
>
> #当列表中的元素已被命名,则既可使用"cbind.data.frame",也可使用"cbind"
> names(a_list) = c("cat", "months", "dog")
> do.call(cbind, lapply(lapply(a_list, unlist), `length<-`, max(lengths(a_list))))
# cat months dog
# [1,] "1" "Jan" "1"
# [2,] "1" "Feb" "1"
# [3,] "2" "Mar" "2"
# [4,] "5" "Apr" "5"
# [5,] "14" "May" "14"
# [6,] "42" "Jun" "42"
# [7,] NA "Jul" "22"
# [8,] NA "Aug" "88"
# [9,] NA "Sep" "0"
# [10,] NA "Oct" NA
# [11,] NA "Nov" NA
# [12,] NA "Dec" NA
不同长度向量合并为dataframe - list转dataframe
最新推荐文章于 2023-01-08 21:23:26 发布
这篇博客展示了如何在R语言中对列表进行操作,包括构造列表、合并列表元素并确保各列长度一致。通过`lapply`、`unlist`和`length<-`函数调整列表元素长度,并使用`cbind.data.frame`或`cbind`进行数据帧的组合。此外,还演示了如何为列表元素命名并在组合时保留这些名称。
摘要由CSDN通过智能技术生成