【问题标题】:Calculating means and sd for different groups [duplicate]计算不同组的平均值和标准差[重复]
【发布时间】:2021-03-22 16:52:06
【问题描述】:

我正在尝试根据 data.frame 中的组计算均值和标准差。

Sample Widht Weight Length
A1.1 3.5 6.7 5.8
8.3 4.2 6.3 5.5
A1.1 2.9 5.7 5.1
8.3 3.7 6.1 5.4

我一直在尝试使用此代码根据样本计算每列的均值和标准差。我在实际数据框中还有更多列,但所有列都应根据示例列计算。

agdf<- aggregate(d.f, by=list(d.f$sample), function(x) c(mean = mean(x, na.rm=TRUE), sd = sd(x, na.rm=TRUE)))

当我尝试这个命令时,我得到这个错误信息:

    Error in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) :
    Calling var(x) on a factor x is defunct.
    Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.

我检查了每一列的类别,“样本”列是一个因素,而其他列是数字。我对 R 很陌生,我真的不明白出了什么问题以及如何解决它。我真的很感激一些想法/帮助。谢谢。

【问题讨论】:

  • 请提供您的数据框的dput(d.f) 以获得帮助者/回答者的帮助
  • 请注意,在您的代码中,您正在编写带有小写“s”的 sample 列,而在您的屏幕截图中,它似乎是大写的 - 这是 R 中的差异。
  • agdf <- aggregate(.~sample, d.f, function(x) c(mean = mean(x, na.rm = TRUE), sd = sd(x, na.rm = TRUE)))

标签: r aggregate average reshape standard-deviation


【解决方案1】:

总是喜欢 tidyverse 方式:

library(tidyverse)

agdf <- d.f %>%
  group_by(sample) %>%
  summarize(across(everything(), list(mean = mean, sd = sd), na.rm = TRUE))

这里我们假设您要聚合除分组列之外的所有列。如果只想总结几列,可以调整across(...)部分。

【讨论】:

    最近更新 更多