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