Замена распространения () с pivot_wider () - PullRequest
1 голос
/ 22 января 2020

У меня есть набор данных, над которым я работаю и редактирую в R с помощью пакета dplyr. Мой код:

    hiphop%>%
  mutate( sex = 
    case_when(
      sex == 1 ~ "female",
      sex == 0 ~ "male"
    )
  )%>%
  group_by(sex)%>%
  summarise_at(vars(intl,vocal,classical,folk,rock,country,pop,alternative,hiphop,unclassifiable),funs(mean))%>%
  pivot_longer(c(intl,vocal,classical,folk,rock,country,pop,alternative,hiphop,unclassifiable),names_to = "genre")%>%
spread(sex,value)%>%
  mutate(
    genredifference = abs(female-male)
  )%>%
  arrange(genredifference)%>%
  top_n(3)

Где я получаю этот вывод:

Selecting by genredifference
# A tibble: 3 x 4
  genre   female  male genredifference
  <chr>    <dbl> <dbl>           <dbl>
1 country  0.786 0.392           0.394
2 vocal    0.880 1.57            0.688
3 rock     1.93  3.06            1.13 

Я хотел бы получить тот же вывод, но заменив функцию spread () на pivot_wider () (I считаю, что это будет тот, который будет использоваться). Однако я не могу понять, как это сделать.

Спасибо!

PS: Это мой набор данных, если вам интересно:

hiphop <- read_csv("https://www.dropbox.com/s/5d8fwxrj3jtua1z/hiphop.csv?dl=1")

1 Ответ

1 голос
/ 22 января 2020

На основании входных данных выпадающего списка некоторые шаги уже выполнены. Мы можем сделать некоторые шаги более компактными, используя select_helpers, т. Е. Если у нас есть диапазон столбцов для выбора, используйте :, аналогично pivot_longer, мы также можем указать столбцы, которые не нужно выбирать, с помощью -. С pivot_wider, убедитесь, что вы указали аргументы (names_from, values_from), так как есть и другие аргументы, и без указания аргументов, они могут совпадать с аргументами в порядке вхождения

library(dplyr)
library(tidyr)
 hiphop %>%  
    group_by(sex)%>%
    summarise_at(vars(intl:unclassifiable), mean) %>%
    pivot_longer(cols = -sex) %>% 
    pivot_wider(names_from = sex, values_from = value) %>%
    mutate(genredifference = abs(Female-Male))%>%
    arrange(genredifference)%>%
    top_n(3)
# A tibble: 3 x 4
#  name    Female  Male genredifference
#  <chr>    <dbl> <dbl>           <dbl>
#1 country  0.786 0.392           0.394
#2 vocal    0.880 1.57            0.688
#3 rock     1.93  3.06            1.13 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...