去除有na的列
时间: 2024-02-22 12:01:00 浏览: 73
可以使用 `na.omit()` 函数来删除包含 `NA` 值的行,但是如果你想要删除包含 `NA` 值的列,可以使用下面两种方法:
1. 使用 `complete.cases()` 函数来创建一个逻辑向量,其中 `TRUE` 表示该行不包含 `NA` 值,`FALSE` 表示该行包含 `NA` 值。然后,使用索引来选择所有列中 `TRUE` 的值所对应的列。例如:
```
# 创建一个包含 NA 的数据框
df <- data.frame(a = c(1, 2, NA, 4), b = c(NA, 6, 7, 8), c = c(9, 10, 11, 12))
# 删除包含 NA 的列
df <- df[, complete.cases(df)]
```
在上面的例子中,`complete.cases(df)` 函数返回一个逻辑向量 `[1] FALSE TRUE TRUE`,表示第一列包含 `NA`,而第二和第三列没有包含 `NA`。因此,我们可以使用 `df[, complete.cases(df)]` 来选择第二和第三列,即可得到删除包含 `NA` 的列后的数据框。
2. 使用 `colSums()` 函数和逻辑向量来选择所有列中不包含 `NA` 的列。例如:
```
# 创建一个包含 NA 的数据框
df <- data.frame(a = c(1, 2, NA, 4), b = c(NA, 6, 7, 8), c = c(9, 10, 11, 12))
# 删除包含 NA 的列
df <- df[, colSums(is.na(df)) == 0]
```
在上面的例子中,`is.na(df)` 函数返回一个逻辑矩阵,其中 `TRUE` 表示该位置为 `NA`,`FALSE` 表示该位置不为 `NA`。然后,使用 `colSums()` 函数对逻辑矩阵进行列求和,得到一个包含每列中 `NA` 值数量的数值向量。最后,使用逻辑向量 `colSums(is.na(df)) == 0` 来选择所有列中不包含 `NA` 的列,即可得到删除包含 `NA` 的列后的数据框。
阅读全文