【发布时间】:2017-11-20 17:15:42
【问题描述】:
我有一个大数据框,其中包括以下 2 个字段和显示的行数(为简单起见仅显示 2 列):
> nrow(df)
[1] 3541393
> summary(df$ttlVisits)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 1.000 1.000 1.527 1.000 118.000
> summary(df$AVGsessTOS)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
1 27 30 115 72 21554 280146
我想删除 AVGsessTOS > 1628 的行
> nrow(df[df$AVGsessTOS>=1628,])
[1] 300645
所以,我运行以下命令,预计要删除 300,645 行,但结果却是 20,499:
过滤器 1:
df
命令对行数和原始 2 列的影响:
> 3541393 - nrow(df)
[1] 20499
> summary(df$ttlVisits)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
1.00 1.00 1.00 1.53 1.00 118.00 280146
> summary(df$AVGsessTOS)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
1.0 27.0 30.0 102.5 70.0 1627.5 280146
如果我对过滤方法进行简单更改并使用 'which' 函数,我会得到预期的结果。
过滤器 2:
df df
以及命令的影响:
> 3541393 - nrow(df)
[1] 300645
> summary(df$ttlVisits)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 1.000 1.000 1.526 1.000 118.000
> summary(df$AVGsessTOS)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.0 27.0 30.0 102.5 70.0 1627.5
我对上述内容的解释是,过滤器 #1 导致预期的 300,645 行被删除,但由于 df$AVGsessTOS 中存在 NA,因此产生了添加 280,146 个“空行”的副作用。 (300,645 - 280,146 = 20,499)
有人可以证实我对这些结果的解释,这是过滤器 #1 的预期行为吗?
也许这也可以帮助其他人避免被此所困扰。谢谢
更新:用 mtcars 复制问题:
data(mtcars)
set.seed(66)
> nrow(mtcars)
[1] 32
看'carb'列的分布明细和预期的一样,一共32个:
> table(mtcars$carb)
1 2 3 4 6 8
7 10 3 10 1 1
现在将 3 carb 值设置为 NA(不是整行,只是 carb 值)以创建与我的数据集相似的数据,以说明问题:
set.seed(66)
mtcars[sample(1:nrow(mtcars), 3), ]$carb <- NA
再次,'carb' 列的分布总计 29 与预期一致,在设置 NA 后比原来的少 3:
> table(mtcars$carb)
1 2 3 4 6 8
6 10 1 10 1 1
现在,删除上面显示的 6 行,碳水化合物值为 1
> mtcars2 <- mtcars[mtcars$carb>=2,]
确认预期的记录已被删除:
> table(mtcars2$carb)
2 3 4 6 8
10 1 10 1 1
但是,行数与上述计数不一致:
> nrow(mtcars2)
26
检查数据显示 3 整行 NA 值。 这些行来自哪里?
View(mtcars2)
( replicate to see output of 'view' )
【问题讨论】: