我有一个包含一些原始数据的数据框。让我们举个例子,并使用数据样本“ 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
我想在此汇总数据帧(在此示例中称为species
)中添加一个计算列。
我都尝试过
species$mean <- species$zoom * mean(iris$Sepal.Length)
# (AND)
species$mean <- species$zoom * mean(iris$Sepal.Length[iris$Species==species$s])
但是第一个不起作用,因为它正在对所有原始数据进行计算,而不是按物种分组。第二个似乎也不起作用。
我可以做到这一点而无需在行上循环吗?
答案 0 :(得分:1)
也许这种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