Транспонирование кадра данных - PullRequest
0 голосов
/ 24 октября 2018

В ситуации, когда у меня есть

  > sample_df <- data.frame(id = c(14129, 29102, 2191, 2192, 1912)
                        , color = c("blue", "red", "green", "purple", "blue")
                        , day = c("monday", "wednesday", "thursday", "monday", "tuesday")
                        , happy = c(1, 1, 1, 1, 1))

  > sample_df 
     id  color       day happy
  14129   blue    monday     1
  29102    red wednesday     1
   2191  green  thursday     1
   2192 purple    monday     1
   1912   blue   tuesday     1

, я хочу иметь возможность создать столбец, в котором два столбца будут иметь что-то вроде:

> sample_df_2 <- data.frame(id = c(14129,14129, 29102,29102, 2191,2191, 2192,2192, 1912,1912)
                          , type = c("blue", "monday","red","wednesday","green","thursday","purple","monday","blue","tuesday")
                          , happy = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1))

> sample_df_2
      id      type happy
   14129      blue     0
   14129    monday     1
   29102       red     0
   29102 wednesday     1
    2191     green     0
    2191  thursday     1
    2192    purple     0
    2192    monday     1
    1912      blue     0
    1912   tuesday     1

Идея опоследний столбец просто говорит, что если мы имеем дело со значением, извлеченным из исходного поля color, то happy автоматически 0, в противном случае 1

1 Ответ

0 голосов
/ 24 октября 2018

После gather в формате 'long', один вариант - заменить значения в 'happy', которые соответствуют 'color' в столбце 'key', на отрицательное значение, select интересующие столбцы и arrange при необходимости

library(tidyverse)
gather(sample_df, key, type, color:day) %>%
    mutate(happy = case_when(key == "color" ~ as.numeric(!happy), TRUE ~ happy)) %>%
    select(-key) %>%
    arrange(id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...