我在data.table中设置了多个键,但是当我尝试按键的多个值选择行时,它似乎为每个潜在组合返回一行,但为不存在的行填充NA。
我可以在本文档的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
<code>DT[i]的行中查找<code>i的每一行。默认情况下,i
的不匹配行显示为NA
。要删除不匹配的行,请使用nomatch=0
:
dt[.(unique(colA),"A"), nomatch=0]
# colA colB colC
# 1: 1 A 11
# 2: 2 A 12
标号参数
包含在 OP 链接的小插曲中。要查找最新版本的小插图,请使用浏览虚拟插图(“data.table”)
。
作为旁注,在加入之前无需设置密钥。相反,可以使用 on=
:
library(data.table)
dt2 = data.table(colA = 1:4,
colB = c("A","A","B","B"),
colC = 11:14)
dt2[.(unique(colA),"A"), on=.(colA, colB), nomatch=0]
# colA colB colC
# 1: 1 A 11
# 2: 2 A 12
参见Arun的回答,了解为什么通常不需要键控来提高连接的性能。上面写着:
通常,除非在同一个键控data.table上执行重复的分组/连接操作,否则不应该有明显的差异。
我通常只在以交互方式进行连接时设置键,因此我可以跳过在=上键入。
这个程序打印00,但是如果我注释掉a.store和b.store,而取消注释a.fetch_add和b.fetch_add,这做了完全相同的事情,即都设置了a=1,b=1的值,我永远不会得到00。 是我错过了什么,还是“00”按标准永远不会出现? 下面打印00。 下图从不打印00 再看看这个,多线程原子a b打印00 for memory_order_refield
当标题[currSlotNo]的值为空时,该行将导致错误: } HomeVu1.VdslotService updVideoSlotData pictureInst:331 Picid[currSlotNo]:331 HomeVu1.VdslotService updVideoSlotData Picmk:331 HomeVu1.VdslotService updVideoSlotData aud
问题内容: 奇怪的行为:我希望第一和第二个console.log显示不同的结果,但是它们显示相同的结果,并且仅在下次单击时更改该值。我应该如何编辑代码,以使值有所不同? 您可以在这里看到一个有效的示例:https : //codesandbox.io/s/wz9y5lqyzk 问题答案: 状态更新是异步的,因此如果您使用的是Hooks,则可以在更新后收到通知。 这是一个例子: https://co
我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方
问题内容: 我不了解python中列表的行为: 为什么一个元素的分配影响另一个元素?感谢您的回答! 问题答案: 当您将一个列表相乘时,它会复制对该列表的引用,但不会创建该列表的副本。由于列表是可变的,因此在更改列表时,所有对其引用的引用都会更改。 用ASCII术语来说: 您可以清楚地看到更改list3将同时影响两个位置。 如果要创建可变长列表而不复制引用,则应执行以下操作: 在这里,我们使用列表理
也许有些东西我没有完全理解,但是在阅读了“自动使用decltype”之后 让我们假设我们有 我定义了两个lamba(一个带有auto,另一个正确转发auto) 结果是一样的:f(s)和g(s)调用size(constd::string 我的问题是:为什么会发生这种情况?难道不应该只有第二个lambda能够区分左值和右值吗?我期望第一个lambda(f())调用两倍大小(const std::str