r - 为什么mean函数不能与ave函数一起使用

标签 r dataframe

我想添加一个新的计算列"new",其中包含每个区域“蛇”的平均值。我尝试使用 ave 函数,但它不适用于 mean。我尝试使用 sum 运行同一行,它成功了,原因是什么,是否有其他方法可以获得所需的结果。

这是我的玩具数据框:

df <- read.table(text = "snakes birds    wolfs     area
                            3        9         7 a
                            3        8         4 b
                            1        2         8 c
                            1        2         3 a
                            1        8         3 a
                            6        1         2 a
                            6        7         1 b
                            6        1         5 c   ",header = TRUE)

这是代码的工作行:

df$sum <- ave(df$snakes, df$area, FUN=sum)
df
  snakes birds wolfs area sum
1      3     9     7    a   11
2      3     8     4    b    9
3      1     2     8    c    7
4      1     2     3    a   11
5      1     8     3    a   11
6      6     1     2    a   11
7      6     7     1    b    9
8      6     1     5    c    7

这是用平均值函数替换 sum 函数时出现的错误:

df$avg <- ave(df$snakes, df$area, FUN=mean)
Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'FUN' of mode 'function' was not found

最佳答案

ave工作于 R 3.2.2 , R 3.1.0 (基于@Pascal的评论),以及R studio version 0.99.467 。因此,我们不确定错误背后的真正原因。至mean就我们而言,我们不需要明确指定,因为

ave(df$snakes, df$area)
#[1] 2.75 4.50 3.50 2.75 2.75 2.75 4.50 3.50

一个base R替代方案是 split/unsplit我们在哪里split “区域”列旁边的“蛇”,得到 meansnakes ,将其复制到 length list的元素和unsplit按“区域”

unsplit(lapply(split(df$snakes, df$area), 
        function(x) rep(mean(x),length(x))), df$area)
#[1] 2.75 4.50 3.50 2.75 2.75 2.75 4.50 3.50
<小时/>

如果我们可以安装其他软件包,我们可以使用 dplyrdata.table .

使用dplyr ,我们按“区域”分组,并使用 mutate 创建“avg”列.

library(dplyr)
df %>%
   group_by(area) %>% 
   mutate(avg= mean(snakes))

我们将“data.frame”转换为“data.table”( setDT(df) ),按“区域”分组,我们分配( := ) mean “snakes”作为“avg”列。

library(data.table)
setDT(df)[, avg:= mean(snakes), by = area]

关于r - 为什么mean函数不能与ave函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374841/

相关文章:

java - 计算多项分布的卷积

R:更改行顺序

R:ifelse 条件 -> 替换为条件为真的最后一个值

python - 在 Pandas 中使用 SUMIF 函数

python - 如何将具有 1 行的数据框扩展到它的数百倍

r - 如何在R中将一个分组变量分成两个带有字符串值的变量?

r - 处理 R 中缺失/不完整的数据——是否有屏蔽但不删除 NA 的功能?

python - 在 Spyder 中再次运行代码后如何查看更新的数据框(每次运行后无需从变量资源管理器中双击)?

python - 如何根据列值在现有数据框中添加新行?

scala - 从 Spark2 中的 spark 临时表创建表后记录丢失