【问题标题】:Spreading a data.frame and adding columns传播 data.frame 并添加列
【发布时间】:2018-08-31 18:14:51
【问题描述】:

我有这种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 的做法是什么?

【问题讨论】:

    标签: r dataframe dplyr tidyr


    【解决方案1】:

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

    library(tidyverse)
    df %>%
       gather(key, val, effect:effect_p.value) %>%
       unite(fname,factor_name, key) %>%
       spread(fname, val)
    

    如果列名需要按特定顺序排列,则 mutate 'fname' 列通过转换为 factorlevels 按预期顺序指定

    【讨论】:

      【解决方案2】:

      我对@akrun 给出了类似的答案,但我建议不要进行最终传播。它确实达到了您所要求的结果,但我敢打赌,您会发现您的数据更易于以“长”和“整齐”的格式处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 2014-06-11
        • 2015-09-10
        相关资源
        最近更新 更多