R-根据原始数据和汇总df中的列,将计算列添加到汇总数据框中

R-根据原始数据和汇总df中的列,将计算列添加到汇总数据框中,r,dataframe,R,Dataframe,我有一个包含一些原始数据的数据框。让我们举一个例子,使用数据样本iris # load a data sample data("iris") # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 3.5 1.4 0.2 setosa #2 4.9 3.0 1.4 0.2 s

我有一个包含一些原始数据的数据框。让我们举一个例子,使用数据样本iris

# load a data sample
data("iris")

#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1          5.1         3.5          1.4         0.2  setosa
#2          4.9         3.0          1.4         0.2  setosa
#3          4.7         3.2          1.3         0.2  setosa
# ...
我还有另一个数据框,其中包含了该物种的汇总数据

species <- data.frame(unique(iris$Species))
colnames(species) <- "s"

# Add a zoom level
species$zoom <- c(2,3,5)

#                species  zoom
# 1               setosa     2
# 2           versicolor     3
# 3            virginica     5
但是第一种方法不起作用,因为它是对所有原始数据进行计算,而不是按物种分组。第二个似乎不太管用

我可以在不循环行的情况下执行此操作吗?

也许这个data.table方法可以帮助您解决这个问题

data("iris")

library(data.table)
setDT( iris )[ , list( mean = mean( Sepal.Length ) ), by=Species][, mean_mult := mean * c(2,3,5)][]

#       Species  mean mean_mult
# 1:     setosa 5.006    10.012
# 2: versicolor 5.936    17.808
# 3:  virginica 6.588    32.940

当你可以进行聚合时,为什么你想要一个单独的数据框。~Species,iris,mean?因为在我的真实数据集中,我需要做比平均更复杂的事情,平均应该使用汇总数据框中的一些列。我会相应地更新我的数据样本。谢谢你的回答,你认为我可以调整这个以使用我总结的数据框中的缩放列吗?我在20分钟前编辑了我问题中的代码
data("iris")

library(data.table)
setDT( iris )[ , list( mean = mean( Sepal.Length ) ), by=Species][, mean_mult := mean * c(2,3,5)][]

#       Species  mean mean_mult
# 1:     setosa 5.006    10.012
# 2: versicolor 5.936    17.808
# 3:  virginica 6.588    32.940