【发布时间】:2021-05-01 08:54:44
【问题描述】:
我知道我的问题很容易回答。 但我什么都试过了。 以下代码有什么问题? 为什么不是 grouping_by(name)? .... 有管子和没有管子我都试过了。
df <- data.frame(name= c("jose", "jose", "maria", "maria", "maria", "pedro"),
values= c(rep(1,6)), stringsAsFactors = T)
df1 <- mutate(df, N=sum(values)) # summing without grouping
# without pipe
df <- group_by(df, name) # grouping $name
df2 <- mutate(df, N= sum(values)) # summing by group
df1 == df2 # there's no difference between results: group_by() is not working
# name values N
#[1,] TRUE TRUE TRUE
#[2,] TRUE TRUE TRUE
#[3,] TRUE TRUE TRUE
#[4,] TRUE TRUE TRUE
#[5,] TRUE TRUE TRUE
#[6,] TRUE TRUE TRUE
# with pipe
df3 <- df %>% group_by(name) %>% # grouping $name
mutate(N= sum(values)) # summing by group
df1 == df3 # there's no difference between results: group_by() is not working
# name values N
#[1,] TRUE TRUE TRUE
#[2,] TRUE TRUE TRUE
#[3,] TRUE TRUE TRUE
#[4,] TRUE TRUE TRUE
#[5,] TRUE TRUE TRUE
#[6,] TRUE TRUE TRUE
我想要的输出是一个新列,其中包含按组的值总和:
df$N <- c(2,2,3,3,3,1) # DESIRED
我得到的输出是没有分组的总和:
df$N <- c(6,6,6,6,6,6) # NOT DESIRED
【问题讨论】:
-
我实际上在
N列中得到了FALSE,但我确实听到了有关如何在较新版本中调整group_by行为的对话,请在mutate语句之后尝试ungroup和看看情况是否有变化。 -
你没有指定你想要的输出,但我怀疑你想要
summarise(N=sum(values), .groups="drop")而不是mutate(N=sum(values))。 -
我想要的输出是一个新列,其中包含按组的值总和:df$N
-
当我运行你的代码时,我得到了想要的输出,即
df3$N是2 2 3 3 3 1。您很可能已经加载了plyr库,它掩盖了mutate函数。尝试使用dplyr::mutate即df3 <- df %>% group_by(name) %>% dplyr::mutate(N= sum(values))
标签: r group-by tidyverse dplyr