2017-07-19 107 views
-5
ID<-rep(1:6,each=3) 
DV<-rep(1:6,each=3) 
DV2<-rep(2:7,each=3) 
DV3<-rep(3:8,each=3) 
time<-rep(1:3,times=6) 
df<-data.frame(ID,DV,DV2,DV3,time) 

有人請告訴我該怎麼做我計算每個時間點的平均DV((DV1 + DV2 + DV3)/ 3)。平均值將代表所有ID的& DV(DV,DV2,DV3)的那個時間點的平均DV,並且也可以獲得相同的95和5個百分點範圍。在R中的列間計算平均值

+0

你需要' rowMeans' – G5W

+0

[可以隨時分析比較2個數據幀逐行分析]的可能重複(https://stackoverflow.com/questions/45149824/analysis-over-time-comparing-2-dataframes-row-by-row) – alaybourn

+0

I認爲我誤解了你的帖子。你想讓'DV'等於'((DV1 + DV2 + DV3)/ 3)'列,然後計算每行'time'的值的平均值'DV' - 正確嗎? – Damian

回答

0

使用使用data.table包dplyr

library(dplyr) 

df %>% 
    rename(DV1 = DV) %>% 
    mutate(DV = DV1 + DV2 + DV3) %>% 
    group_by(time) %>% 
    summarize(avg = mean(DV), 
       p95 = quantile(DV, .95), 
       p05 = quantile(DV, .05)) 

結果

# A tibble: 3 x 4 
    time avg p95 p05 
    <int> <dbl> <dbl> <dbl> 
1  1 13.5 20.25 6.75 
2  2 13.5 20.25 6.75 
3  3 13.5 20.25 6.75 
1

一個例子:

require(data.table) 
setDT(df) 
df[, .(avg = mean(DV + DV2 + DV3), 
     perc5 = quantile(DV + DV2 + DV3, 0.05), 
     perc95 = quantile(DV + DV2 + DV3, 0.95)), 
    by = time] 


    time avg perc5 perc95 
1: 1 13.5 6.75 20.25 
2: 2 13.5 6.75 20.25 
3: 3 13.5 6.75 20.25 

但要確保你完全使用它之前瞭解quantile,但我認爲這是功能你正在尋找。

1

我有同樣的問題,並使用dplyr包和管道來解決它。基本上,我首先選擇我想申請上,然後調換它們,並將它們重新轉換成數據幀和合並與原始數據幀的平均列...

bla <- data %>% select(seq(3,9,1)) %>% t %>% as.data.frame %>% 
sapply(mean) %>% as.data.frame 
colnames(bla) <- c("Mean") 
data.audiogram <- cbind(data,bla) 

乾杯