我有一个data.frame
10 个不同的列(每列的长度相同)。我想消除任何具有 'NA
' 大于柱长的 15%。
我首先需要制作一个函数来计算百分比NA
对于每一列,然后再制作另一列data.frame
我在哪里应用该函数?最好的方法是什么?
首先,分享一些示例数据总是好的。它不需要是您的实际数据——编造的数据就可以。
set.seed(1)
x <- rnorm(1000)
x[sample(1000, 150)] <- NA
mydf <- data.frame(matrix(x, ncol = 10))
其次,您可以使用内置函数来获得您需要的东西。这里,is.na(mydf)
进行逻辑检查并返回data.frame
of TRUE
and FALSE
. Since TRUE
and FALSE
等于1
and 0
,我们可以使用colMeans
得到数量的平均值TRUE
(is NA
)值。反过来,可以根据您的规定检查,在本例中哪些列的比例超过 15%NA
values?
colMeans(is.na(mydf)) > .15
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
正如我们所看到的,我们应该删除 X1、X2、X6、X8 和 X9。同样,利用逻辑向量,方法如下:
> final <- mydf[, colMeans(is.na(mydf)) <= .15]
> dim(final)
[1] 100 5
> names(final)
[1] "X3" "X4" "X5" "X7" "X10"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)