Как преобразовать данные из длинного в широкоформатный формат, чтобы добиться такого вывода?

У меня проблемы с перестановкой следующего фрейма данных с tidyr пакет:

data <- data.frame(
    name = rep(c("John", "Mary", "Peter", "Sarah"), each=2),
    firm = c("a", "b", "c", "d", "a", "b", "c", "d"),
    rank = rep(1:2, 4),
    value = rnorm(8)
    )

Я хочу изменить его так, чтобы каждая уникальная переменная "name" представляла собой имя строки, с "значениями" в качестве наблюдений вдоль этой строки и "rank" в качестве имен столбцов, за которыми следовало бы "фирменное" имя. Вроде как это:

  name          1      firm_1            2       firm_2
  John       0.3407997      a        -0.3795377      b
  Mary      -0.8981073      c       -0.5013782       d
  Peter     0.3407997       a        -0.3795377      b
  Sarah     -0.8981073      c       -0.5013782       d

0 ответов

Мы можем использовать комбинацию dplyr а также tidyr, как и в комментариях @aosmith.

library(dplyr) # [1] ‘1.0.0’
library(tidyr) # [1] ‘1.1.0’

data %>% pivot_wider(names_from = rank, values_from = c(firm, value)) %>%
        select(name, `1` = value_1, firm_1, `2` = value_2, firm_2)

Чтобы полностью перейти от длинного к широкому формату, мы должны взять values_from не 1, а 2 столбца, как оригинал data имеет 4, а не 3 столбца.

Другие вопросы по тегам