Условная транспонирование с NA в R - PullRequest
0 голосов
/ 28 июня 2018

Я использовал пакет 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 голосов
/ 28 июня 2018

Пропустить 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))
0 голосов
/ 28 июня 2018

Этого легко достичь с помощью функции spread из пакета tidyr. tidyr является частью tidyverse.

Просто используйте:

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

Параметр по умолчанию для заполнения отсутствующих наблюдений - fill = 'NA'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...