我在%c()与== c()中使用%来获取一些意外行为来过滤多个条件下的数据。我在== c()方法时返回不完整的结果。这种行为有合理的解释吗?
=IF(ROW(C1)<$E$1,"",AVERAGE(INDEX(C:C,ROW(C1)-$E$1+1):C1))
如果我转换&#39; region&#39;结果不会改变。数字。
答案 0 :(得分:4)
我在== c()方法时返回不完整的结果。有没有 这种行为的逻辑解释?
这是合乎逻辑的,让我们看看:
df$region == 1:2
# [1] TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
df$region %in% 1:2
# [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
原因是你试图比较不同长度向量的第一种形式,因为@lukeA在他的评论中说这个形式与(见implementation-of-standard-recycling-rules)相同:
# 1 1 1 2 2 3 3 4 4 4 ## df$region
# 1 2 1 2 1 2 1 2 1 2 ## c(1,2) recycled to the same length
# T F T T F F F F F F ## equality of the corresponding elements
df$region == c(1,2,1,2,1,2,1,2,1,2)
# [1] TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
操作员左侧的每个值都使用操作员右侧的相应值进行测试。
但是,当你使用df$region %in% 1:2
时,它的想法更多:
sapply(df$region, function(x) { any(x==1:2) })
# [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
我的意思是每个值都针对第二个向量进行测试,如果有一个匹配则返回TRUE。