如何将带有列表列的 tibble 转换为数据框列表
How to convert a tibble with list column to a list of dataframes
我有一个看起来像这样的 tibble
(我们称它为 param_table
):
+--------+------------------+
| name | param |
+--------+------------------+
| apple | <named list [2]> |
+--------+------------------+
| orange | <named list [2]> |
+--------+------------------+
| pear | <named list [2]> |
+--------+------------------+
| banana | <named list [2]> |
+--------+------------------+
- 这个tibble是
map(safely(...)...)
对不同水果使用自定义函数的结果。
- 例如,调用
param_table$param[[1]]
将 return 苹果的结果:
$result
+-----+-------+-------+
| | alpha | beta |
+-----+-------+-------+
| 1 | 0.1 | 1.1 |
+-----+-------+-------+
| 2 | 0.2 | 1.2 |
+-----+-------+-------+
| 3 | 0.3 | 1.3 |
+-----+-------+-------+
| 4 | 0.4 | 1.4 |
+-----+-------+-------+
| 5 | 0.5 | 1.5 |
+-----+-------+-------+
| ... | ... | ... |
+-----+-------+-------+
(There are in total 10,000 rows, skipping the rest here)
$error
NULL
我正在编写一个闪亮的应用程序,我需要在其中直接调用 $result
中的 table 作为数据框。我不能像as.data.frame(param_table$param[[1]]$result)
那样简单地做某事,因为这是针对个别水果的手册,并不适用于所有水果。
理想情况下,我希望最终结果看起来像这样:一个 tibble,其中每个水果的参数值是一个 df,而不是包含 $result
和 [= 的命名列表22=]。换句话说,我想保留每个水果的 $result
,同时扔掉 $error
。
我希望标题看起来像这样
+--------+-----------------------+
| name | param |
+--------+-----------------------+
| apple | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| orange | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| pear | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| banana | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
- 如果我调用
param_table$param[[1]]
,它会 return 我得到苹果的结果:
+-----+-------+-------+
| | alpha | beta |
+-----+-------+-------+
| 1 | 0.1 | 1.1 |
+-----+-------+-------+
| 2 | 0.2 | 1.2 |
+-----+-------+-------+
| 3 | 0.3 | 1.3 |
+-----+-------+-------+
| 4 | 0.4 | 1.4 |
+-----+-------+-------+
| 5 | 0.5 | 1.5 |
+-----+-------+-------+
| ... | ... | ... |
+-----+-------+-------+
我应该写一个函数来进行这种转换吗?类似于:
for (i in names){
as.data.frame(param_table1[[as.numeric(which(names == i))]])
}
非常感谢您的帮助!
您可以使用map
提取您想要的组件:
param_table %>%
mutate(param = map(param, ~.x$result))
我有一个看起来像这样的 tibble
(我们称它为 param_table
):
+--------+------------------+
| name | param |
+--------+------------------+
| apple | <named list [2]> |
+--------+------------------+
| orange | <named list [2]> |
+--------+------------------+
| pear | <named list [2]> |
+--------+------------------+
| banana | <named list [2]> |
+--------+------------------+
- 这个tibble是
map(safely(...)...)
对不同水果使用自定义函数的结果。 - 例如,调用
param_table$param[[1]]
将 return 苹果的结果:
$result
+-----+-------+-------+
| | alpha | beta |
+-----+-------+-------+
| 1 | 0.1 | 1.1 |
+-----+-------+-------+
| 2 | 0.2 | 1.2 |
+-----+-------+-------+
| 3 | 0.3 | 1.3 |
+-----+-------+-------+
| 4 | 0.4 | 1.4 |
+-----+-------+-------+
| 5 | 0.5 | 1.5 |
+-----+-------+-------+
| ... | ... | ... |
+-----+-------+-------+
(There are in total 10,000 rows, skipping the rest here)
$error
NULL
我正在编写一个闪亮的应用程序,我需要在其中直接调用
$result
中的 table 作为数据框。我不能像as.data.frame(param_table$param[[1]]$result)
那样简单地做某事,因为这是针对个别水果的手册,并不适用于所有水果。理想情况下,我希望最终结果看起来像这样:一个 tibble,其中每个水果的参数值是一个 df,而不是包含
$result
和 [= 的命名列表22=]。换句话说,我想保留每个水果的$result
,同时扔掉$error
。我希望标题看起来像这样
+--------+-----------------------+
| name | param |
+--------+-----------------------+
| apple | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| orange | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| pear | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| banana | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
- 如果我调用
param_table$param[[1]]
,它会 return 我得到苹果的结果:
+-----+-------+-------+
| | alpha | beta |
+-----+-------+-------+
| 1 | 0.1 | 1.1 |
+-----+-------+-------+
| 2 | 0.2 | 1.2 |
+-----+-------+-------+
| 3 | 0.3 | 1.3 |
+-----+-------+-------+
| 4 | 0.4 | 1.4 |
+-----+-------+-------+
| 5 | 0.5 | 1.5 |
+-----+-------+-------+
| ... | ... | ... |
+-----+-------+-------+
我应该写一个函数来进行这种转换吗?类似于:
for (i in names){
as.data.frame(param_table1[[as.numeric(which(names == i))]])
}
非常感谢您的帮助!
您可以使用map
提取您想要的组件:
param_table %>%
mutate(param = map(param, ~.x$result))