我想添加一个新的计算列"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
3.2.2
中重现这个错误。 你在干净的R会话中运行了这段代码吗? - user3710546mean
,因为默认情况下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]
吗? - akrununsplit(lapply(split(df$snakes, df$area), function(x) rep(mean(x),length(x))), df$area)
进行操作。 - akrundplyr
和lapply
+split
的替代方案发布为答案。 - user3710546