2016-03-01 39 views
0

我想根據特定列R中聚集的一些數據。 示例數據如下。R:總在行,如果X小於價值,不聚集若不

> d <- data.frame(POS=c(1,2,2,2,3,4,4,5), Dist=c(111,6,9,58,250,4,65,111),Read=c(1,2,6,6,25,1,8,11)) 
> print(d) 
    POS Dist Read 
1 1 111 1 
2 2 6 2 
3 2 9 6 
4 2 58 6 
5 3 250 25 
6 4 4 1 
7 4 65 8 
8 5 111 11 

我希望做的是根據列計算跨行平均讀取僅在距離欄小於100。所以,在POS欄,我想第1行獨處作爲組1,然後計算第2,3排的平均值作爲第3組,計算第6排的平均值(平均值= 4.5)。

「真實」數據集沒有POS列,並且長度> 24,000行,所以我寧願不識別哪些行應該被手動平均。

+1

你可以試試'庫(data.table); setDT(df)[,M:= mean(W23540_02 [Distance..2.1。<100]),by = POS] [is.na(M),M:= as.double(W23540_02)]',儘管I'我不知道你是怎麼拿出那個'55.7'的。 –

回答

1

好吧,這應該這樣做。

DF意味着數據幀,或者您有存儲在您的數據的對象。

library(dplyr) 

summary_dataset <- d %>% filter(Dist < 100) %>% group_by(POS) %>% summarize(Mean = mean(Read)) 

對這些彙總值綁定到數據集,就用這個。

d$Mean <- summary_dataset$Mean[match(d$POS, summary_dataset$POS)] 

此外,我敢肯定,這樣做比我做的更容易。應該有一個簡單的一行代碼來做到這一點,但我不知道。

+0

謝謝你看看這個!我添加了一個數據集並試圖更好地解釋我遇到的問題。 – user3491003

+0

好的,所以我調整了我的代碼,詢問你的問題。它是否完成這項工作? – InfiniteFlashChess

+0

工作!謝謝! – user3491003