r - 将 List 转换为 Matrix 或 Tibble 格式的最佳方法?
问题描述
我正在寻找一种体面的方法来将函数的输出作为列表转换为矩阵或 tibble 格式。
以下 tibble 输入到一个函数中。该函数返回一个列表。在这个简单的示例中,返回的列表恰好包含与函数输入 tibble 相同的值。
# # A tibble: 6 x 15
# rev CoS gm sga ebitda bd ebit ie ii gain ebt chg_DTL current tax ni
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这是从函数返回的列表。
> ni_out
$rev
[1] 0 0 0 0 0 0
$CoS
[1] 0 0 0 0 0 0
$gm
[1] 0 0 0 0 0 0
$sga
[1] 0 0 0 0 0 0
$ebitda
[1] 0 0 0 0 0 0
$bd
[1] 0 0 0 0 0 0
$ebit
[1] 0 0 0 0 0 0
$ie
[1] 0 0 0 0 0 0
$ii
[1] 0 0 0 0 0 0
$gain
[1] 0 0 0 0 0 0
$ebt
[1] 0 0 0 0 0 0
$chg_DTL_net
[1] 0 0 0 0 0 0
$current
[1] 0 0 0 0 0 0
$tax
[1] 0 0 0 0 0 0
$ni
[1] 0 0 0 0 0 0
我希望将其转换回更令人愉悦的内容,例如原始 tibble 格式或矩阵。
我获得了列表输出的维度。
lengths(ni_out)[[1]]
# [1] 6
> length(ni_out)
# [1] 15
但是,我对矩阵的不成功尝试如下所示。
as.matrix(unlist(ni_out), nrow = lengths(ni_out)[[1]], ncol = length(ni_out))
# [,1]
# rev1 0
# rev2 0
# rev3 0
# rev4 0
# rev5 0
# rev6 0
# CoS1 0
# CoS2 0
# CoS3 0
# CoS4 0
# CoS5 0
# CoS6 0
# gm1 0
# gm2 0
# gm3 0
# gm4 0
# gm5 0
# gm6 0
# sga1 0
# sga2 0
# sga3 0
# sga4 0
# sga5 0
# sga6 0
# ebitda1 0
# ebitda2 0
# etc.
矩阵或小标题格式的想法?
解决方案
下次请提供一个可重现的例子。
如果您的列表被调用mylist
,我会尝试data.table::rbindlist(mylist)
请参阅下面的示例,包括将向量转换为data.frames
.
dat <- 0:5
mylist <- list(dat, dat, dat)
mylist <- lapply(mylist, function(x) data.frame(t(x)))
data.table::rbindlist(mylist)
> data.table::rbindlist(mylist)
X1 X2 X3 X4 X5 X6
1: 0 1 2 3 4 5
2: 0 1 2 3 4 5
3: 0 1 2 3 4 5
编辑:似乎你想cbind
代替rbind
,所以在这种情况下我会使用下面的。
dat <- 0:5
mylist <- list(dat, dat, dat)
mylist <- lapply(mylist, function(x) data.frame(x))
dplyr::bind_cols(mylist)
x...1 x...2 x...3
1 0 0 0
2 1 1 1
3 2 2 2
4 3 3 3
5 4 4 4
6 5 5 5
正如您所看到的,答案因您的需求而异,因此提供一个示例很重要。
推荐阅读
- ios - iOS Swift:在字符串中查找匹配单词的范围
- database - 迁移数据库时显示错误语法错误或访问冲突:1067 'domain_status' 的默认值无效
- multicast - 使用 socat 将多播从一个网络复制到另一个网络
- python - 如何将一个 df 中的一列除以 pandas 中不同 df 中的另一列?
- ruby - pod install 命令不成功。返回未安装的红宝石宝石
- azure - Azure FormRecognizer 的邮递员发布请求不起作用
- regex - 使用正则表达式提取 Web 日志数据
- c# - LINQ 查询未统计日期时间验证
- javascript - 轮播项目超过高度..或高度未调整到轮播项目
- python - 如何从python中的字典键中删除点