【问题标题】:Conditional Transpose with NAs in RR中带有NA的条件转置
【发布时间】:2018-06-28 16:50:20
【问题描述】:

我使用了 dplyr 包来总结一些数据。我生成的数据框如下所示:

Iteration   Degree   Proportion
    1          0         .5
    1          30        .7
    1          60        .8
    2          0         .6
    2          30        .9
    3          0         .3
    3          30        .8
    3          60        .8

我想将我的数据框转换为一个新的数据框,其中 3 度条件中的每一个都是它们自己的列,并填写相应的比例值。最重要的是我需要估算' NA' 值,只要迭代没有度值。

我正在考虑的数据框看起来像这样:

Iteration  0_Degree  30_Degree  60_Degree
     1        .5         .7         .8
     2        .6         .9         NA
     3        .3         .8         .8

确定需要填写 NA 的位置是我目前面临的主要挑战。

有没有人知道我可以如何做到这一点?

谢谢!

【问题讨论】:

    标签: r dataframe transpose na


    【解决方案1】:

    这可以通过tidyr 包中的spread 函数轻松实现。 tidyrtidyverse 的一部分。

    简单使用:

    library(tidyverse)
    df %>% 
      spread(key = Degree, value = Proportion)
    

    填充缺失观察的默认选项是fill = 'NA'

    【讨论】:

    【解决方案2】:

    如果您不需要将as.data.frame 作为数据框,请省略它。不使用任何包。

    as.data.frame(tapply(dd[[3]], dd[-3], c))
    

    给予:

        0  30  60
    1 0.5 0.7 0.8
    2 0.6 0.9  NA
    3 0.3 0.8 0.8
    

    注意

    可重现形式的输入是:

    dd <- structure(list(Iteration = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L), 
        Degree = c(0L, 30L, 60L, 0L, 30L, 0L, 30L, 60L), Proportion = c(0.5, 
        0.7, 0.8, 0.6, 0.9, 0.3, 0.8, 0.8)), class = "data.frame", row.names = c(NA, 
    -8L))
    

    【讨论】:

    • 这也很好用。谢谢!我很欣赏解决方案的非包装替代品。为我提供了如何处理我一直在处理的其他一些问题的想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2020-09-28
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多