R-根据原始数据和汇总df

时间:2018-09-05 08:31:12

标签: 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  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])

但是第一个不起作用,因为它正在对所有原始数据进行计算,而不是按物种分组。第二个似乎也不起作用。

我可以做到这一点而无需在行上循环吗?

1 个答案:

答案 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