2014-07-14 75 views
1

我有兩個載體:條件計算與R部的列值的數目2

x <- c(1,1,1,1,1, 2,2,2,3,3, 3,3,3,4,4, 5,5,5,5,5) 
y <- c(2,2,1,3,2, 1,4,2,2,NA, 3,3,3,4,NA, 1,4,4,2,NA) 

這裏(Conditional calculating the numbers of values in column with R)中所討論的問題是如何通過Y和X中,當找到值的平均值x中X是由組spited:

if x<=2, group I 
    if 2<x<=3, group II 
    if 3<X<=5, group III 

的最佳解決方案通過@ Mike.Gahan提供的是:

#Bring in data.table library 
require(data.table) 
data <- data.table(x,y) 

#Summarize data 
data[,list(x=mean(x,na.rm=T)),by=list(y,x.grp=cut(x,c(-Inf,2,3,5,Inf)))] [order(y,x.grp)] 

但是這個解決方案不會在結果中放置NA。

是否有人知道如何輸出結果中的所有行,包括具有NA的行?

現在輸出的是:

  y x.grp x 
    1: 1 (-Inf,2] 1.500000 
    2: 1 (3,5] 5.000000 
    3: 2 (-Inf,2] 1.250000 
    4: 2 (2,3] 3.000000 
    5: 2 (3,5] 5.000000 
    6: 3 (-Inf,2] 1.000000 
    7: 3 (2,3] 3.000000 
    8: 4 (-Inf,2] 2.000000 
    9: 4 (3,5] 4.666667 
    10: NA (2,3] 3.000000 
    11: NA (3,5] 4.500000 

其中X爲數字的平均值在X每一組由Y

+0

目前還不清楚你想輸出的是什麼..? – eddi

+0

@eddi編輯問題 – user3827724

+0

好的,是的,這是輸出 - 你不喜歡它的是什麼?現在的問題還不清楚 - 你希望*輸出是什麼? – eddi

回答

0

答案是:

setkey(result, y, x.grp) 
result[CJ(unique(y), unique(x.grp))] 

感謝@eddi !