R 如何解决聚合SD函数中的错误消息?

R 如何解决聚合SD函数中的错误消息?,r,R,我试图运行一个聚合SD函数,但收到了一条无法解析的错误消息,或者收到了无法工作的输出。我包括示例数据——目标是在更大的数据集上运行,但我甚至无法让聚合函数处理这三列 dput(droplevels(controls2[1:20, 1:3])) structure(list(Experiment = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label

我试图运行一个聚合SD函数,但收到了一条无法解析的错误消息,或者收到了无法工作的输出。我包括示例数据——目标是在更大的数据集上运行,但我甚至无法让聚合函数处理这三列

dput(droplevels(controls2[1:20, 1:3]))
structure(list(Experiment = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Ceres- Clipping", 
"FGI- Defoliation"), class = "factor"), Grain = c(489.9, 698.5, 
430.6, 244.9, 476.5, 545.4, 570.2, 463.1, 285.1, 407.6, 244.9, 
401.9, 126.3, 179.9, 382.7, 266, 653, 653, 606.6, 606.6), Environment = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L), .Label = c("Morris.1", "St. Paul.1"), class = "factor")), row.names = c(3565L, 
3566L, 3567L, 3568L, 3569L, 3570L, 3571L, 3572L, 3573L, 3574L, 
3575L, 3576L, 3577L, 3578L, 3579L, 3580L, 2379L, 2380L, 2381L, 
2382L), class = "data.frame")

controlSDs <- aggregate(x = controls2, by = list(controls2$Experiment, controls2$Environment), FUN = "sd")
但是,我尝试在
controls2$Grain
上执行的唯一列是数值列:

names(controls2)
[1] "Experiment"  "Grain"       "Environment"

class(controls2$Grain)
[1] "numeric"
我知道
controls2$Environment
controls2$experience
都是因子,但我以前在
by=list()
命令中使用因子运行过这个命令,它已经起作用了。我还尝试了以下方法:

controlSDs <- aggregate(cbind(Experiment, Environment) ~ Grain, data = controls2, sd)

任何关于如何使这个聚合SD函数正确工作的建议都将不胜感激。我会很高兴有一个简单的解决方案,可以让我计算谷物列的SD,但理想情况下,我可以将其扩展到一个100+列的数据集,除了环境和实验列之外,该数据集是完全数字的。我在过去两周内更新了R和R Studio。我仍在学习如何提出可重复的问题,因此请告诉我是否有什么可以改进此问题的方法。

您是否正在寻找此问题。指定公式时,需要在
~
左侧设置数值变量:

#Code
controlSDs <- aggregate(data = controls2,Grain~.,
                        FUN = sd)
根据您的尝试,这也可以起作用:

#Code2
controlSDs <- aggregate(Grain~Experiment+Environment , data = controls2, sd)
#代码2

控制SDS我们可以使用
dplyr

library(dplyr)
controls2 %>%
      group_by(Experiment, Environment) %>%
      summarise(Grain = sd(Grain))

谢谢我不敢相信我在这个语法上犯了这么简单的错误。我最后要找的是控制系统
controlSDs
        Experiment Environment     Grain
1  Ceres- Clipping    Morris.1 154.67734
2 FGI- Defoliation  St. Paul.1  26.78905
#Code2
controlSDs <- aggregate(Grain~Experiment+Environment , data = controls2, sd)
library(dplyr)
controls2 %>%
      group_by(Experiment, Environment) %>%
      summarise(Grain = sd(Grain))