首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tapply中的多in列表

tapply中的多in列表
EN

Stack Overflow用户
提问于 2015-09-13 20:51:19
回答 2查看 250关注 0票数 0

我想计算不同组中变量的平均值。为了定义组,我想使用数据框架中描述单个观察的两列的组合:

代码语言:javascript
复制
a<-sample(12)
b<-sample(-100:100, 12)
d<-c(-11:0)
O<-rep(c("Nn","Hy"), each=6)
H<-rep(c("In+", "In-"), each=3, times=2) 
ID<-rep(c("bo","co", "do", "fo"), each=3)
mydata<-data.frame(ID, a, b, d, O, H)
gg.df <- melt(mydata, id.var=c("ID", "O", "H"), variable.name="int")

mean.w<-tapply(subset( x= gg.df, subset = int == "a") , 
list(gg.df$O, gg.df$H), mean, na.rm=TRUE)

我收到以下错误消息:

代码语言:javascript
复制
Error in tapply(subset(x = gg.df, subset = int == "a"), list(gg.df$O,  : 
  arguments must have same length 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-13 21:03:15

我想也许你正在寻找这两种解决方案中的一种。对于tapply(),第一个参数是向量,而不是整个数据集。来自help(tapply)

使用 tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE) 参数 X原子对象,通常是向量。

我发现,如果我们从tapply()开始调用,那么with()就更容易理解了。在这里,我们可以使用对with()的调用中的子集,然后tapply()调用更容易阅读。

代码语言:javascript
复制
with(subset(gg.df, int == "a"), tapply(value, list(O, H), mean, na.rm = TRUE))
#         In-      In+
# Hy 5.000000 8.000000
# Nn 5.333333 7.666667

aggregate(value ~ O + H, subset(gg.df, int == "a"), mean, na.rm = TRUE)
#    O   H    value
# 1 Hy In- 5.000000
# 2 Nn In- 5.333333
# 3 Hy In+ 8.000000
# 4 Nn In+ 7.666667

注意,您也可以使用gg.df[gg.df$int == "a", ]作为子集,而不是使用subset()。还要注意,我们可以获得更多的信息,结果是我们在tapply()中使用了tapply()而不是list()

代码语言:javascript
复制
with(subset(gg.df, int == "a"), tapply(value, data.frame(O, H), mean))
#     H
# O         In-      In+
#   Hy 5.000000 8.000000
#   Nn 5.333333 7.666667
票数 3
EN

Stack Overflow用户

发布于 2015-09-13 21:18:26

另一种选择:

代码语言:javascript
复制
library(dplyr)
library(tidyr)

mydata %>% 
  gather(int, value, -O, -H, -ID) %>%
  filter(int == "a") %>%
  group_by(O, H) %>%
  summarise(value = mean(value, na.rm = TRUE))

这意味着:

代码语言:javascript
复制
#       O      H    value
#  (fctr) (fctr)    (dbl)
#1     Hy    In- 7.333333
#2     Hy    In+ 6.666667
#3     Nn    In- 6.666667
#4     Nn    In+ 5.333333
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32554414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档