R 数据表评估1/0不等于真/假

R 数据表评估1/0不等于真/假,r,data.table,R,Data.table,考虑代码片段: library(data.table) foo <- data.table(a = rep(c(1, 0), 5), b = c(rep('bar', 5), rep('baz', 5))) 但这不是: > foo[, sum(b[a] == 'bar')] [1] 5 可通过以下方式进行纠正: > foo[, sum(b[a == 1] == 'bar')] [1] 3 在这种情况下,Is 1/0不会被评估为真/假吗?在这种情况下,打印出中间结果可以帮助

考虑代码片段:

library(data.table)
foo <- data.table(a = rep(c(1, 0), 5), b = c(rep('bar', 5), rep('baz', 5)))
但这不是:

> foo[, sum(b[a] == 'bar')]
[1] 5
可通过以下方式进行纠正:

> foo[, sum(b[a == 1] == 'bar')]
[1] 3

在这种情况下,Is 1/0不会被评估为真/假吗?

在这种情况下,打印出中间结果可以帮助了解情况

a=rep(c(1,0,5)
b=c(代表('bar',5),代表('baz',5))
A.
#>  [1] 1 0 1 0 1 0 1 0 1 0
B
#>[1]“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”“巴”
b[a]
#>[1]“bar”“bar”“bar”“bar”“bar”
b[按逻辑(a)]
#>[1]“bar”“bar”“bar”“baz”“baz”
由(v0.3.0)于2019-10-28创建


通过使用
b[a]
您要告诉
R
的是,对于
a
的每个元素,您需要
b
的元素,该元素对应于来自
a
的索引。由于
a
仅由0和1组成,因此最终只得到第一个索引5次。

a
作为索引计算,就像在正态R向量中一样。这与data.table完全无关。您只需在位置
a
处选择
b
,位置0在R中不存在。因此,您只需在位置1处选择五次
b
。根据您的逻辑,即使
a
等于100,它仍然可以工作,因为100也可以通过
as转换为
TRUE
。逻辑
@davidernburg请考虑将此注释作为答案,我愿意接受此答案。:)我认为下面的答案很好,不是吗?我真的不喜欢他的代表。如果他的回答对你有帮助的话,你可以接受
> foo[, sum(b[a == 1] == 'bar')]
[1] 3