传播data.frame并添加列

时间:2018-08-31 18:14:52

标签: r dataframe dplyr tidyr

我有这种data.frame格式(来自lm摘要matrix的结果)

set.seed(1)
df <- data.frame(effect = rnorm(3), effect_se = runif(3,0,0.2), effect_p.value = runif(3,0,1), factor_name = paste0("F",1:3))

我想spread更改为以下格式:

spread.df <- data.frame(F1.effect = df$effect[1], F1.effect_se = df$effect_se[1], F1.effect_p.value = df$effect_p.value[1],
                        F2.effect = df$effect[2], F2.effect_se = df$effect_se[2], F2.effect_p.value = df$effect_p.value[2],
                        F3.effect = df$effect[3], F3.effect_se = df$effect_se[3], F3.effect_p.value = df$effect_p.value[3])

tidyr的实现方式是什么?

2 个答案:

答案 0 :(得分:2)

一种选择是将domain\remote_user转换为“长”格式,gather列和unite

spread

如果列名需要以特定顺序排列,则通过以预期顺序指定的library(tidyverse) df %>% gather(key, val, effect:effect_p.value) %>% unite(fname,factor_name, key) %>% spread(fname, val) 转换为mutatefactor到'fname'列

答案 1 :(得分:0)

我对@akrun给出了类似的答案,但我建议不要做最后的传播。它可以达到您肯定要求的结果,但我敢打赌,您会发现“长”和“整洁”格式的数据更易于使用。

相关问题