上下文:我正在构建一些函数,这些函数可以自动生成表并设置样式以生成报告(即后期分析工作)。我采用的方法是将数据整理成数据帧,然后将其馈送到“ flextable”以进行进一步处理。在工作流的各个点,我需要折叠行或列并应用某种格式。
在下面的示例代码中,您将找到两个数据帧long_df和wide_df,我希望它们看起来像各自的目标数据帧。我陷入了困境。
我认为长格式时可能是“ tidyr :: unite”或在“ dplyr :: mutate”中使用粘贴。任何提示将不胜感激。
library(tibble)
long_df <- tribble(
~Statistc, ~Model_1, ~Model_2,
'G2', 413.42, 532.93,
'df', 2, 3,
'CFI', .95, .91,
)
wide_df <- tribble(
~model, ~G2, ~df, ~CFI,
'Model_1', 413.42, 2, .95,
'Model_2', 532.93, 3, .91,
)
target_wide_df <- tribble(
~model, ~'G2 (df)', ~CFI,
'Model_1', '413.42 (2)', .95,
'Model_2', '532.93 (3)', .91,
)
target_long_df <- tribble(
~Statistc, ~Model_1, ~Model_2,
'G2 (df)', '413.42 (2)', '532.93 (3)',
'CFI', .95, .91,
)
答案 0 :(得分:1)
从“ long_df”开始,我们可以做
library(tidyverse)
long_df %>%
group_by(grp = rep(1:2, 2:1)) %>%
summarise_all(list(~ if(n() > 1) str_c(.[1], ' (', .[2], ')')
else as.character(.))) %>%
ungroup %>%
select(-grp)
在wide_df
中,可以尝试使用str_c
或str_c
+ unite
的类似方法
wide_df %>%
unite(`G2 (df)`, G2, df, sep=" (") %>%
mutate(`G2 (df)` = str_c(`G2 (df)`, ')'))