我是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)]
两列都是字符。
答案 0 :(得分: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
但结果是一样的。