【发布时间】:2017-11-18 14:29:30
【问题描述】:
我在 data.table 中设置了多个键,但是当我尝试通过键的多个值选择行时,它似乎为每个潜在组合返回一行,但对于不存在的行填充 NA .
我可以在this document 的 1c 中获得示例代码,所以它一定是我没有看到的东西。任何帮助将不胜感激。
library(data.table)
dt = data.table(colA = 1:4,
colB = c("A","A","B","B"),
colC = 11:14)
setkey(dt,colA,colB)
print(dt)
# colA colB colC
# 1: 1 A 11
# 2: 2 A 12
# 3: 3 B 13
# 4: 4 B 14
print(
dt[.(2,"A")]
)
# As expected
# colA colB colC
# 1: 2 A 12
print(
dt[.(c(2,3),"A")]
)
# colA colB colC
# 1: 2 A 12
# 2: 3 A NA #Unexpected
print(
dt[.(unique(colA),"A")]
)
# colA colB colC
# 1: 1 A 11
# 2: 2 A 12
# 3: 3 A NA #Unexpected
# 4: 4 A NA #Unexpected
【问题讨论】:
-
好问题。添加
nomatch=0,如dt[.(unique(colA),"A"), nomatch=0]。这包含在密钥小插图中:browseVignettes("data.table")或查看网站:github.com/Rdatatable/data.table/wiki/Getting-started 啊,我看到你已经链接到那里了。 -
非常感谢弗兰克。那行得通,如果您提交,我会接受答案。我很想知道为什么教程的航班数据不需要这样做。
-
当然,您能否更具体地说明您所说的“不需要”是什么意思?
-
不需要我的意思是
flights[.(unique(origin), "MIA")]没有返回 NA 列,但我意识到这一定是因为没有匹配的组合。再次感谢。
标签: r data.table