r - 将具有不同长度的列表转换为R中的数据框或数据表
问题描述
我有一个列表列表。这些列表的长度不同。
listXYZ <- list(c("x1", "x2", "x3"),
c("y1", "y2", "y3", "y4", "y5", "y6"),
c("z1"))
我想将列表转换为用于打印的表格knitr
,xtable
但我想避免使用plyr
,因为我已经加载了 dplyr,并且不希望两者都可用的命令混淆(也不要写package::
在所有内容的前面)。没有那个限制,我会使用
plyr::ldply(listXYZ, rbind)
但我见过的最简单的非 plyr 等价物是
do.call(rbind, listXYZ)
这通过重复较短的列表来替换空格,直到它达到最长列表的长度。较短列表中的空白应填写 NA,
由于列表长度不同,其他方法会导致错误消息,例如:
In (function (..., deparse.level = 1) :
number of columns of result is not a multiple of vector length (arg 1)
有没有一种方法可以很好地扩展(对于更大的列表)?在我的例子中,列表总是有 5 行,但是列表的长度变化很大。
解决方案
您遇到的问题可以通过更新长度属性来解决。
len <- max(lengths(listXYZ))
t(sapply(listXYZ, `length<-`, len))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] "x1" "x2" "x3" NA NA NA
[2,] "y1" "y2" "y3" "y4" "y5" "y6"
[3,] "z1" NA NA NA NA NA
来自文档:当一个向量被加长时,它会用 NAs 填充到它的新长度。
推荐阅读
- bash - 剪切命令不重定向
- apache-spark - 火花流:执行每日聚合
- c++ - 通过 DirectX12 工具包进行挑选
- android - Parse-SDK-Android:parse:1.24.0 有修复吗
- python - 相对 import_module 不知道包含包的名称
- outlook-addin - 调用方法需要提升权限:'mailbox.getUserIdentityToken'
- jekyll - kernel_require.rb 无法加载此类文件 jekyll
- dotnetnuke - 将 DNN (DotNetNuke) 迁移到 Godaddy Plesk
- acumatica - 如何使用 put 在 acumatica 中上传照片
- google-dfp - 亚马逊与 prebid 并行使用更简单的 GPT 和刷新