2013-01-05 96 views
-2

我是新來data.table,並試圖找到我的表中有多少行在兩列中具有相同的值。結果表中有多行包含相同的組合鍵。有人可以幫我解決我做錯了什麼嗎?聚合後與數據表重複。表

labs_raw_df <- data.table(labs_raw) 
setkey(labs_raw_df, NAT, LAB_TST_AN_LAB_TST_CD) 
lab_pt_count <- labs_raw_df[, 
list(n=.N) 
    ,by=list(NAT, LAB_TST_AN_LAB_TST_CD)] 

兩列都是字符。

+7

難道你不應該發佈'dput(head(labs_raw,20))'或類似的重複嗎? –

回答

1

寫一個答案,因爲這太長了評論。

我假設你使用data.table 1.8.6。

讓我們創建一些虛擬的數據:

set.seed(42) 
labs_raw_df <- data.frame(NAT=sample(c("A","B","C"),20,TRUE), 
          LAB_TST_AN_LAB_TST_CD=sample(c("A","B","C"),20,TRUE), 
          value=sample(0:1,20,TRUE)) 

現在你的代碼(有命名的一些小的修改):

library(data.table) 
labs_raw_dt <- data.table(labs_raw_df) 
setkey(labs_raw_dt, NAT, LAB_TST_AN_LAB_TST_CD) 
lab_pt_count <- labs_raw_dt[, 
          list(n=.N), 
          by=list(NAT, LAB_TST_AN_LAB_TST_CD)] 
print(lab_pt_count) 

    NAT LAB_TST_AN_LAB_TST_CD n 
1: A      A 1 
2: A      C 3 
3: B      A 2 
4: B      B 3 
5: B      C 2 
6: C      A 2 
7: C      B 2 
8: C      C 5 

這是預期的結果。你能詳細說明如何不符合你的期望?

當然,我們可以簡化一下:

lab_pt_count <- labs_raw_dt[, 
          .N, 
          by=key(labs_raw_dt)] 
print(lab_pt_count) 

    NAT LAB_TST_AN_LAB_TST_CD N 
1: A      A 1 
2: A      C 3 
3: B      A 2 
4: B      B 3 
5: B      C 2 
6: C      A 2 
7: C      B 2 
8: C      C 5 

但結果是一樣的。

+0

我得到了多個具有相同NAT和LAB_TST_AN_LAB_TST_CD值的行。嗯。至少我知道我的代碼應該工作。對不起,我沒有一個可重複的例子來分享。 – user1951980