2014-04-13 14 views
2

我想刪除高於97.5%且低於2.5%的數據點。我創建了以下吝嗇的數據集來解釋這個問題:刪除特定分位數以外的數據點

y <- data.table(a = rep(c("b","d"), each = 2, times = 3), c=rep(c("e","f"), 
each = 3, times = 2), seq(1,6)) 

我創建了下面的腳本來完成這個任務:

require(data.table) 
y[, trimErr := ifelse(y$V3 < quantile(y$V3, 0.95) & y$V3 > quantile(y$V3, 0.05),y$V3, NA), 
by = list(a,c)] 

然後我得到了4個警告信息,我將只提供第一個警告:

Warning messages: 
1: In `[.data.table`(y, , `:=`(trimErr, ifelse(y$V3 < quantile(y$V3, : 
    RHS 1 is length 12 (greater than the size (3) of group 1). The last 9 element(s) will be discarded. 

請問你能向我解釋一下警告的含義以及如何修改我的代碼。

你會建議一個更好的代碼來刪除頂部和底部2.5%的數據。提前致謝。

回答

3

您正在按ac進行分組,但傳入的是整個data.table長度的向量,而不是每個組的數據。

你不需要[.data.table呼叫

y[, trimErr:=ifelse(V3 < quantile(V3, 0.95) & V3 > quantile(V3, 0.05),V3, NA), 
    by=list(a,c)] 
y 
# a c V3 trimErr 
# 1: b e 1  NA 
# 2: b e 2  2 
# 3: d e 3  NA 
# 4: d f 4  NA 
# 5: b f 5  5 
# 6: b f 6  NA 
# 7: d e 1  NA 
# 8: d e 2  2 
# 9: b e 3  NA 
#10: b f 4  NA 
#11: d f 5  5 
#12: d f 6  NA 
+1

謝謝GSEE內y$,做得好 –