2017-05-20 42 views
1

簡介:總結的載體,然後將摘要統計附加到原始數據幀中的R

我想以計算平均值,標準偏差,和一個數字向量的標準誤差在給定的數據幀,然後使用這些彙總統計量創建三個新的向量。然後我需要將它們與原始數據幀結合起來。

示例代碼:

## 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。我需要爲低成本傳感器和昂貴的參考儀器之間的一些校準生成帶誤差線的線圖圖之一。

+1

創建新列並賦值像這樣:'df $ mean < - mean(df $ values)'。按照相同的程序'sd'和最後一列 –

+0

哇,太容易了,謝謝!我應該知道更好的...我試圖弄清楚如何用dplyr來做這件事...... – spacedSparking

+1

或者:'sd0 < - function(x){sd(x)/ sqrt(length(x))* sqrt (length(x)-1)}; (x){sd0(x)/ sqrt(length(x))};其中, df2 [c('mean','se','sd')] < - lapply(list(mean,se0,sd0),function(f)f(df $ values)) – mt1022

回答

2

您可以同時進行分配。假設你已經有輔助函數爲你選擇的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 
+0

這工作太棒了!謝謝! – spacedSparking

+0

@spacedSparking,出於好奇,爲什麼你在R中使用了一個有偏差的估計值而不是默認的'sd'。 – mt1022

+1

這是一個很好的問題......我在'df $ sd < - sd(df $值)'和'sd0'函數。我看到sd爲'1'與'0.81',se'爲'0.57'和'0.47'似乎sd()函數提供了樣本標準偏差,而'sd0()函數提供總體標準偏差...這聽起來是正確的嗎? – spacedSparking

1

這裏是dplyr解決方案,在mt1022的回答給出sd0se0

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

這太棒了。感謝分享! – spacedSparking