R-数据帧中的新列,具有基于三个条件的聚合值

R-数据帧中的新列,具有基于三个条件的聚合值,r,R,假设我有数据框: df <- data.frame(Year = rep(1:3, each = 5) , Terminal = c(1,1,1,1,1,1,2,2,2,2,2,2,2,1,2) , day = c (1,1,1,1,1,1,2,2,2,2,2,2,2,1,2) , Capacity = sample(1:15)) 及 但当我尝试创建新列时,它只打印1或2个值,而不打印总

假设我有数据框:

df <- data.frame(Year = rep(1:3, each = 5)
                 , Terminal = c(1,1,1,1,1,1,2,2,2,2,2,2,2,1,2)
                 , day = c (1,1,1,1,1,1,2,2,2,2,2,2,2,1,2)
                 , Capacity = sample(1:15))


但当我尝试创建新列时,它只打印1或2个值,而不打印总和。此外,它还提供了以下信息。我对X的代码是
df[“X”],
aggregate
返回一个摘要输出,而不是创建一个新列。我们可以使用
mutate
from
dplyr

library(dplyr)
df %>%
   group_by(Year, day, Terminal) %>%
   mutate(X = sum(Capacity))
对于
data.table
方法,我们需要分配
:=
来创建一个新列

as.data.table(df)[, X := sum(Capacity), by = .(Terminal, Year, day)]

或者使用
ave
from
base R

df$X <- with(df, ave(Capacity, Year, day, Terminal, FUN = sum))

df$Xaggregate
返回汇总输出,而不创建新列。我们可以使用
mutate
from
dplyr

library(dplyr)
df %>%
   group_by(Year, day, Terminal) %>%
   mutate(X = sum(Capacity))
对于
data.table
方法,我们需要分配
:=
来创建一个新列

as.data.table(df)[, X := sum(Capacity), by = .(Terminal, Year, day)]

或者使用
ave
from
base R

df$X <- with(df, ave(Capacity, Year, day, Terminal, FUN = sum))

df$X感谢akrun,最后一个代码有效,出于某种原因,mutate不会创建列。它打印df,并计算出你。知道原因了吗,我尝试了一个简单的例子,它成功了:
df@Kalenji您需要将输出分配回原始数据集,即
df%groupu by(..
谢谢,它成功了。所有人都可以使用完整的代码。
df%groupu by(年、日、终端)%>%mutate(X=sum(容量))
谢谢akrun,最后一个代码起作用了,出于某种原因,mutate不会创建列。它打印df,并计算出你。你知道为什么吗,我尝试了一个简单的例子,结果成功了:
df@Kalenji你需要将输出分配回原始数据集,即
df%group\u by(..
谢谢,它成功了。所有人都可以重复使用它的完整代码。
df%groupby(年、日、终端)%%>%mutate(X=sum(容量))