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
fromdplyr
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
frombase R
df$X <- with(df, ave(Capacity, Year, day, Terminal, FUN = sum))
df$Xaggregate
返回汇总输出,而不创建新列。我们可以使用mutate
fromdplyr
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
frombase 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(容量))