R с использованием melt () и dcast () с категориальными и числовыми переменными одновременно - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок в программировании на R, и это мой первый вопрос в Stackoverflow.

Допустим, у меня есть фрейм данных с 4 столбцами:(1) индивидуальный идентификатор (цифровой);(2) мораль личности (фактор);(3) город (фактор);(4) Количество имеющихся книг (числовое).

Person_ID <- c(1,2,3,4,5,6,7,8,9,10) 
Morality <- c("Bad guy","Bad guy","Bad guy","Bad guy","Bad guy",
          "Good guy","Good guy","Good guy","Good guy","Good guy") 
City <- c("NiceCity", "UglyCity", "NiceCity", "UglyCity", "NiceCity", 
         "UglyCity", "NiceCity", "UglyCity", "NiceCity", "UglyCity") 
Books <- c(0,3,6,9,12,15,18,21,24,27)
mydf <- data.frame(Person_ID, City, Morality, Books)

Я использую этот код для получения подсчета по каждой категории для переменной Morality в каждом городе:

mycounts<-melt(mydf,
               idvars = c("City"),
               measure.vars = c("Morality"))%>%
  dcast(City~variable+value,
        value.var="value",fill=0,fun.aggregate=length)

Код дает такую ​​таблицу с суммами:

names(mycounts)<-gsub("Morality_","",names(mycounts))
mycounts
      City Bad guy Good guy
1 NiceCity       3        2
2 UglyCity       2        3

Интересно, существует ли аналогичный способ использования dcast() для числовых переменных ( внутритот же сценарий ), например, для получения суммы Books, которой обладают все лица, проживающие в каждом городе:

#> City Bad guy Good guy Books#>1 NiceCity 3 2 [Total number of books in NiceCity]#>2 UglyCity 2 3 [Total number of books in UglyCity]

1 Ответ

0 голосов
/ 08 ноября 2019

Вы имеете в виду что-то вроде этого:

mydf %>% 
  melt(
    idvars = c("City"),
    measure.vars = c("Morality")
  ) %>%
  dcast(
    City ~ variable + value,
    value.var = "Books", 
    fill = 0,
    fun.aggregate = sum
  )
#>       City Morality_Bad guy Morality_Good guy
#> 1 NiceCity               18                42
#> 2 UglyCity               12                63
...