【问题标题】:object not find when aggregating in R在 R 中聚合时找不到对象
【发布时间】:2017-02-20 00:34:06
【问题描述】:

我正在尝试在 R 中使用聚合。我找到了一个示例代码:

attach(mtcars)   
agg=aggregate(mtcars, by=list(cyl,vs),FUN=mean, na.rm=TRUE)      
detach(mtcars)

这很好用。但是,当我尝试使用我的数据进行操作时:

library(stats)  
FileName="Raw.csv"  
Raw=read.csv(FileName,header = TRUE)    
Acc1=aggregate(Raw,by=list(Experiment,SsNum),FUN=mean, na.rm=TRUE)

我收到以下错误消息:
aggregate.data.frame 中的错误(Raw,by = list(Experiment,SsNum),FUN = mean,找不到对象“实验”

我也尝试运行:
Acc2=aggregate(Raw,by=list(Raw$Experiment,Raw$SsNum),FUN=mean, na.rm=TRUE)

我收到以下错误:
有 50 个或更多警告(使用 warnings() 查看前 50 个)

警告是: 1:在 mean.default(X[[i]], ...) 中: 参数不是数字或逻辑:返回 NA

我的主要问题是 Acc1 与在线示例有何不同(效果很好)。

非常感谢

爱丽儿

【问题讨论】:

  • 在第一个参数中,您提供了完整的数据集,您应该为mean 所需的列设置子集
  • 回答你的主要问题:区别是attach(..) ... detach()。顺便说一句:attach() 的使用很危险。
  • 为了帮助其他人复制您的问题,我建议使用dput(head(Raw,5))的输出更新帖子

标签: r aggregate


【解决方案1】:

您可以只计算numeric variablemean,因此您至少需要获取不包括字符变量的数据子集。那是您ACC1 很可能与mtcars 不同,因为在mtcars 中只有数字值,因此您不会在第一行收到警告。

所以在这一行:

Acc2=aggregate(Raw,by=list(Raw$Experiment,Raw$SsNum),FUN=mean, na.rm=TRUE)

您收到错误,因为在 RAW 中似乎有一列不是 numeric

假设你有:

set.seed(4)
Experiment <- sample(seq(1:3), 5, replace=TRUE)
SsNum <- sample(1:10, 5, replace=TRUE)
value <- rnorm(5)
df <- data.frame(Experiment, SsNum, value)

然后聚合工作如下:

aggregate(value ~Experiment + SsNum, data = df, FUN = mean)
  Experiment SsNum      value
1          3     1  1.7768632
2          2     3  0.6892754
3          1     8 -1.2812466
4          1    10  0.8416977

【讨论】:

  • 这只是一个警告。
  • 是的,但正如警告所说argument is not numeric or logical我假设我认为这将有助于避免警告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2012-02-27
相关资源
最近更新 更多