我有data.frame10个不同的列(每列的长度是相同的).我想要消除任何NA"超过列长度的15%"的列.
我是否首先需要创建一个函数来计算NA每列的百分比,然后再创建另一个data.frame我应用函数的位置?最好的方法是什么?
首先,分享一些样本数据总是好的.它不需要是你的实际数据 - 组成的东西很好.
set.seed(1)
x <- rnorm(1000)
x[sample(1000, 150)] <- NA
mydf <- data.frame(matrix(x, ncol = 10))
Run Code Online (Sandbox Code Playgroud)
其次,您可以使用内置函数来获得所需内容.在这里,is.na(mydf)做了逻辑检查和返回data.frame的TRUE和FALSE.由于TRUE和FALSE等于1和0,我们可以colMeans用来得到TRUE(是NA)值的平均数.反过来,可以根据您的规定检查,在这种情况下,哪些列的NA值超过15%?
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
Run Code Online (Sandbox Code Playgroud)
我们可以看到,我们应该删除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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |