【发布时间】:2021-02-03 03:02:32
【问题描述】:
我有以下数据表,我想从所有三个数据表中制作一个数据表。
library(dplyr)
set.seed(123)
dt.Ger <- data.table(date = seq(as.Date('2020-01-01'), by = '1 day', length.out = 365),
Germany = rnorm(365, 2, 1), check.names = FALSE)
dt.Aut <- data.table(date = seq(as.Date('2020-01-01'), by = '1 day', length.out = 365),
Austria = rnorm(365, 4, 2), check.names = FALSE)
dt.Den <- data.table(date = seq(as.Date('2020-01-01'), by = '1 day', length.out = 365),
Denmark = rnorm(365, 3, 1), check.names = FALSE)
dt.Ger <- dt.Ger %>%
mutate(month = format(date, '%b'),
date = format(date, '%d')) %>%
tidyr::pivot_wider(names_from = date, values_from = Germany)
dt.Aut <- dt.Aut %>%
mutate(month = format(date, '%b'),
date = format(date, '%d')) %>%
tidyr::pivot_wider(names_from = date, values_from = Austria)
dt.Den <- dt.Den %>%
mutate(month = format(date, '%b'),
date = format(date, '%d')) %>%
tidyr::pivot_wider(names_from = date, values_from = Denmark)
现在我想将所有表链接在一起,即首先添加dt.Ger,然后可能添加两个空行,然后附加dt.Aut,现在再次添加两个空行,最后添加dt.Den。理想情况下,如果德国是第一个标题,然后是奥地利(在dt.Aut 之前的第二个空行中),然后是丹麦(在dt.Den 之前的第二个空行中),那就太好了。
所以我只有一个表作为回报。这张表应该是这样的(我只用 SnippingTool 做的,所以它只是用来解释):
编辑: 使用
l <- list(dt.Ger, dt.Aut, dt.Den)
l.result <- rbindlist(l)
屈服于:
而且我想获得一个额外的空间/行/行(在红色部分),其中写着德国、奥地利和丹麦。
【问题讨论】:
-
我不太确定这是怎么回事。对我来说看起来像三个单独的表?要将它们合并到
data.table结构中(参见?rbindlist)还是将它们输出为HTMLdatatables? -
我也不完全确定你想在这里实现什么,但我能想到的一个选项(取决于这个目标)是创建一个“国家”列并为每个表填充.然后使用
bind_rows()将它们合并在一起 -
为什么不直接使用 lapply 并将它们作为子列表?如果你真的想要它们作为 data.frames,你可以使用 sapply。这些也应该适用于你的 plot_ly 功能
-
@ismirsehregal 我现在可以将所有 3 个数据表与
rbindlist()合并/加入,但是如何在每个新数据表之前添加标题/标题或空行(带有标题/标题) ?我要在RShiny中输出一张数据表,所以3张数据表都得先合并。 -
@D.J 谢谢你的回答,但我不确定我应该在这里为
FUN使用什么???
标签: r join merge data.table rows