R Studio-按数据帧分组并使用dplyr获取统计信息

R Studio-按数据帧分组并使用dplyr获取统计信息,r,dplyr,R,Dplyr,我有一个数据帧: 我想按“ID”和“direction”进行分组,然后得到“value”的统计数据。对我来说最困难的是,对于“类别”列,我需要始终输出“ID”组中的最后一个“类别”,如图中所示 我有代码,但结果不理想。有人能帮我修改现有的代码吗?谢谢你抽出时间 ID <- c(1,1,1,2,2,2,3,3) category <- c("green", "green", "red", "red","green", "green", "yellow", "yello

我有一个数据帧:

我想按“ID”和“direction”进行分组,然后得到“value”的统计数据。对我来说最困难的是,对于“类别”列,我需要始终输出“ID”组中的最后一个“类别”,如图中所示

我有代码,但结果不理想。有人能帮我修改现有的代码吗?谢谢你抽出时间

ID        <- c(1,1,1,2,2,2,3,3)
category  <- c("green", "green", "red", "red","green", "green", "yellow", "yellow")
direction <- c("in", "out","in", "out","in", "out","in", "out")
value     <- c(4,5,6,7,8,9,10,11)
df        <- data.frame(ID, category, direction, value)

res <- df %>% 
  group_by(ID,direction) %>% 
  arrange(ID, direction)%>%
  summarize(
    category    = last(category),
    sum_value   = sum(value),
    count_value = length(value)
  )

ID你就快到了。只是您的“最后一个(类别)”分组仅基于ID,而不是ID和方向。如果将其更改为:

res <- df %>%
  group_by(ID) %>% 
  mutate(category = last(category)) %>% 
  ungroup %>% 
  group_by(ID, direction, category) %>% 
  summarise(
    sum_value = sum(value),
    count_value = length(value)
  ) %>% 
  ungroup
res%
分组依据(ID)%>%
变异(类别=最后一个(类别))%>%
解组%>%
分组依据(ID、方向、类别)%>%
总结(
sum_值=sum(值),
计数值=长度(值)
) %>% 
解组

它应该会起作用。

请查看此内容,如果它不能回答您的问题,请描述区别以及“我有代码,但结果不理想”的含义,谢谢。是的,结果就是我想要的。你能解释一下“解组”是什么意思吗?因为当我删除它时,结果是一样的。另外,“mutate”给代码增加了什么?
ungroup
基本上就是它在tin上所说的,也就是说,它对data.frame进行解组。如果您想在代码中进一步使用res,它仍然会被分组,这可能会由于dplyr谓词作用于分组的df而不是整个df而导致意外的效果
mutate
保留所有列,而
summary
只保留分组列和您在
summary
调用中添加的列。