2013-01-05 53 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