作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Calculating statistics on subsets of data [duplicate]
(3 个回答)
5年前关闭。
我要加tapply
结果到原始数据框作为一个新列。
这是我的数据框:
dat <- read.table(text = " category birds wolfs snakes
yes 3 9 7
no 3 8 4
no 1 2 8
yes 1 2 3
yes 1 8 3
no 6 1 2
yes 6 7 1
no 6 1 5
yes 5 9 7
no 3 8 7
no 4 2 7
notsure 1 2 3
notsure 7 6 3
no 6 1 1
notsure 6 3 9
no 6 1 1 ",header = TRUE)
tapply(dat$birds, dat$category, mean)
获得每个类别的平均值,但我没有找到将其添加到数据集中的方法,以至于在新列中我将获得相关类别的平均值。
最佳答案
您可以使用 ave
来自 base
dat$mbirds <- with(dat, ave(birds, category, FUN=mean))
tapply
mbirds1 <- with(dat, tapply(birds, category, mean))
dat$mbirds1 <- mbirds1[match(dat$category,names(mbirds1))]
head(dat)
# category birds wolfs snakes mbirds mbirds1
#1 yes 3 9 7 3.200 3.200
#2 no 3 8 4 4.375 4.375
#3 no 1 2 8 4.375 4.375
#4 yes 1 2 3 3.200 3.200
#5 yes 1 8 3 3.200 3.200
#6 no 6 1 2 4.375 4.375
data.table
这会很快
library(data.table)
setDT(dat)[,mbirds1:= mean(birds), by=category]
关于r - 如何将 tapply 结果添加到现有数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604648/
我是一名优秀的程序员,十分优秀!