R中具有NA的条件转置

时间:2018-06-28 16:50:21

标签: r dataframe transpose na

我已经使用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的地方是我目前面临的主要挑战。

有人对我如何做到这一点有想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用spread包中的tidyr函数可以轻松实现。 tidyrtidyverse的一部分。

只需使用:

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

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

答案 1 :(得分:1)

如果您不需要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))