2016-08-01 75 views
-1

我有記錄了重複測量(X4)的數據幀的數據幀,在用於在列1的一組樣本的和次數列2在3-列重複該測量'代表」。施加函數不均勻步驟

head(df1) 
     col1 col2 rep 
1  AE01 0.20  1 
2  AE01 0.28  2 
3  AE01 0.52  3 
4  AE01 0.02  4 
5  AE02 0.19  1 
6  AE02 0.40  2 

我要特別強調獲得四個重複的平均值爲複製測量每四組新的矩陣/數據幀。我嘗試如下:

df2<-cbind(unique(df1$col1), apply(df1$col2[seq(1, length(df1$col2), 4)], 1, mean)) 

我得到以下錯誤:

Error in apply(df1$col2[seq(1, length(df1$col2), 4)], 1, mean) : 
    dim(X) must have a positive length 

這可能是由於這樣的事實,我不得不刪除NA從「na.omit」前面的數據集值因此可能沒有4個重複每個列1記錄樣品的...

如何獲得平均每個樣品,如果步長甚至不是每個樣品?

預期輸出:

 sample  calculated_average_of_each_quadruplet_of_col2_values  
1  AE01              0.255  
2  AE02              0.295  
+0

'用(DF1, ave(col2,col1,FUN = mean,na.rm = TRUE))''有可能嗎? – Psidom

+0

預期輸出已被列入 –

+0

重新校正爲期望的輸出,指定輸出的第二列是複製測量的四胞胎的每個樣品 –

回答

2

如果沒有進一步的進口,這可以與許多包含的功能做像tapply或聚合:

aggregate(df1$col2, by=list(df1$col1), function(x) mean(x, na.rm=TRUE)) 

結果

Group.1  x 
1 AE01 0.255 
2 AE02 0.295 

與tapply去,如果你想有一個向量或列表,你的結果

> tapply(df1$col2, df1$col1, function(x) mean(x, na.rm=TRUE)) 
AE01 AE02 
0.255 0.295 
2

隨着data.table我的做法是

library(data.table) 
setDT(df1) # convert to data table by reference 
df1[, .(mean_col2 = mean(col2, na.rm = TRUE)), by = col1] 

結果:

col1 mean_col2 
1: AE01  0.255 
2: AE02  0.295 
+0

在這種僅返回的平均整個第2列和結合,爲第一列的唯一值 我真正需要的是爲每一個對每個樣品 –

+0

複製測量的四胞胎的平均如果這不是你的預期,爲什麼你有答案接受了Bernhard的答案,這與我的完全一樣嗎? – Uwe

+0

@johnnyutah計算每個樣本'AE01','AE02'等的平均值分開,而不是整個第二列。 – Uwe

2

我們可以使用dplyr

library(dplyr) 
df1 %>% 
    group_by(col1) %>% 
    summarise(mean_col2 = mean(col2, na.rm = TRUE)) 
# col1 mean_col2 
# <chr>  <dbl> 
#1 AE01  0.255 
#2 AE02  0.295