【发布时间】:2015-09-03 11:51:25
【问题描述】:
我想添加一个新的计算列“new”,其中包含每个区域的“snakes”平均值。我尝试使用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
这是我用平均函数替换求和函数时遇到的错误:
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
【问题讨论】:
-
我无法在 R 版本
3.2.2中复制此错误。您是否在 R 的干净会话中运行此代码? -
你不需要将
mean指定为ave(df$snakes, df$area)默认给mean你试过library(dplyr);df %>% group_by(area) %>% mutate(avg= mean(snakes))或library(data.table); setDT(df)[, avg:= mean(snakes), area] -
感谢@akrun,我在另一台使用 R 3.1.2 的机器上运行它,它运行良好。
-
感谢其他解决方案@akrun..
-
你可以在
split之后使用lapplyby 'area'