【问题标题】:Summarise a vector and then append the summary statistics to the original dataframe in R汇总一个向量,然后将汇总统计信息附加到 R 中的原始数据帧
【发布时间】:2017-05-20 01:39:24
【问题描述】:

简介:

我想计算给定数据帧中数值向量的均值、标准差和标准误差,然后使用这些汇总统计数据创建三个新向量。然后我需要将它们与原始数据框结合起来。

示例代码:

## Creating our dataframe:
datetime <- c("5/12/2017 16:15:00","5/16/2017 16:45:00","5/19/2017 17:00:00")
datetime <- as.POSIXct(datetime, format = "%m/%d/%Y %H:%M:%S")
values <- c(1,2,3)
df <- data.frame(datetime, values)

## Here's the current output:
head(df)
             datetime values
1 2017-05-12 16:15:00      1
2 2017-05-16 16:45:00      2
3 2017-05-19 17:00:00      3

## And here's the desired output:
head(df1)
             datetime values mean    sd    se
1 2017-05-12 16:15:00      1    2 0.816 0.471
2 2017-05-16 16:45:00      2    2 0.816 0.471
3 2017-05-19 17:00:00      3    2 0.816 0.471

提前致谢!

对于那些好奇我为什么要这样做的人,我正在关注tutorial。我需要为低成本传感器和昂贵的参考仪器之间的一些校准制作一个带有误差线的折线图。

【问题讨论】:

  • 创建新列并像这样分配平均值:df$mean &lt;- mean(df$values)。对sd 和最后一列执行相同的过程
  • 哇,太简单了,谢谢!我应该知道的更好......我一直在试图弄清楚如何用 dplyr 做到这一点......
  • 或者:sd0 &lt;- function(x){sd(x) / sqrt(length(x)) * sqrt(length(x) - 1)}; se0 &lt;- function(x){ sd0(x) / sqrt(length(x))}; df2[c('mean', 'se', 'sd')] &lt;- lapply(list(mean, se0, sd0), function(f) f(df$values))
  • 不错!我绝对需要对lapply() 感到更舒服。

标签: r reshape2 summary dplyr


【解决方案1】:

你可以同时做作业。假设您已经有了sdse 的帮助函数供您选择:

sd0 <- function(x){sd(x) / sqrt(length(x)) * sqrt(length(x) - 1)}
se0 <- function(x){ sd0(x) / sqrt(length(x))}

那你可以试试:

df[c('mean', 'sd', 'se')] <- lapply(list(mean, sd0, se0), function(f) f(df$values))
# > df
#              datetime values mean        sd        se
# 1 2017-05-12 16:15:00      1    2 0.8164966 0.4714045
# 2 2017-05-16 16:45:00      2    2 0.8164966 0.4714045
# 3 2017-05-19 17:00:00      3    2 0.8164966 0.4714045

【讨论】:

  • @spacedSparking,出于好奇,为什么您使用有偏估计而不是 R 中的默认 sd
  • 这是一个很好的问题...df$sd &lt;- sd(df$values)sd0 函数之间的数字略有不同。我看到10.81 用于sd,0.570.47 用于se...看来sd() 函数提供样本标准偏差,而sd0() 函数提供总体标准差……这听起来对吗?
  • 这是因为sd 使用sqrt(n - 1) 作为分母。仅供参考,请参阅 ?sden.wikipedia.org/wiki/Unbiased_estimation_of_standard_deviation 的手册。
【解决方案2】:

这是dplyr 解决方案,mt1022 的答案中给出了sd0se0

df %>% mutate("mean"=mean(values),"sd"=sd0(values),"se"=se0(values))

【讨论】:

  • 这太棒了。感谢分享!
猜你喜欢
  • 1970-01-01
  • 2018-05-21
  • 2020-12-03
  • 2019-08-18
  • 2018-08-11
  • 2019-03-19
  • 2014-01-15
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多