当我使用 2 或大于 0 的 numbes 时,结果是:
sum(!is.na(HD[HD$VAL >= 24, 1]))
# [1] 53
sum(!is.na(HD[HD$VAL >= 24, 2]))
# [1] 53
当我什么都没用时:
sum(!is.na(HD[HD$VAL >= 24, ]))
# [1] 9276
0
sum(!is.na(HD[HD$VAL >= 24, 0]))
# [1] 0
为什么?
示例数据为:
[1] 17 NA 18 19 20 15 NA NA 13 1 12 15 12 NA NA 17 15 11 NA NA NA 1 NA NA 17 13 NA 8 15 NA 8
[32] 16 22 11 14 19 10 NA 14 18 11 NA 8 12 20 NA 8 12 NA NA 6 15 NA 17 13 10 NA NA 21 17 14 NA
....
在第二个索引中使用数字时,代码仅对这些列中的值求和
sum(!is.na(HD[HD$VAL >= 24, 1]))
这仅对值不是 NA 的第 1 列求和。将列索引留空时,将求和值不是 NA 的所有列。
在R
中,索引从 1 开始,而不是从 0 开始。 因此,使用 0 选择列不会选择任何内容,我们得到 0 作为输出。
对于问题的第二部分,当我们不选择任何列时,即将,
的 rhs 留空时,它正在选择整个数据集列。 1, 2 表示所选列。
在前两种情况下,它对对应于大于 24 的"VAL"的列 1、2 进行子集。然后,我们使用 !is.na 转换为逻辑向量并得到总和。在这种情况下,该列 1 或 2 的子集中有 53 个非 NA 值
即
sum(!is.na(HD[HD$VAL >= 24, 1]))
但是,我们不需要执行此子集。 我们可以使用&
sum(HD$VAL >==24 & !is.na(HD[,1]))
第二列也是如此
sum(HD$VAL >==24 & !is.na(HD[,2]))