我有这种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
的实现方式是什么?
答案 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)
转换为mutate
来factor
到'fname'列
答案 1 :(得分:0)
我对@akrun给出了类似的答案,但我建议不要做最后的传播。它可以达到您肯定要求的结果,但我敢打赌,您会发现“长”和“整洁”格式的数据更易于使用。