R同时使用melt()和dcast()以及分类和数值变量

问题描述 投票:0回答:1

我是使用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]

r melt dcast
1个回答
0
投票

您的意思是这样的吗:

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
© www.soinside.com 2019 - 2024. All rights reserved.