我有这个数据框(
df
):
df <- structure(list(id = c("A", "B", "C", "D", "E", "F", "G", "H",
"I", "J", "K", "L"), name = c("Sam", "Dave", NA, "Alan", "Ted",
"Ana", NA, NA, "Max", NA, "Walt", NA), age = c(28, 32, NA, NA,
23, NA, 21, NA, NA, 22, 21, NA), height = c(NA, 161, NA, 168,
167, NA, 166, NA, 158, 171, NA, NA)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -12L))
我想删除除
id
列之外所有单元格为空的行。数据中可以有任意数量的列。这个df
只有3列(id
除外)。这是最终的数据框final
:
final <- structure(list(id = c("A", "B", "D", "E", "F", "G", "I", "J",
"K"), name = c("Sam", "Dave", "Alan", "Ted", "Ana", NA, "Max",
NA, "Walt"), age = c(28, 32, NA, 23, NA, 21, NA, 22, 21), height = c(NA,
161, 168, 167, NA, 166, 158, 171, NA)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -9L))
是否可以使用
base R
或 tidyverse
套餐?
在基础R中,您可以使用
apply
:
df[!apply(df[-1], 1, \(x) all(is.na(x))),]
# A tibble: 9 x 4
id name age height
<chr> <chr> <dbl> <dbl>
1 A Sam 28 NA
2 B Dave 32 161
3 D Alan NA 168
4 E Ted 23 167
5 F Ana NA NA
6 G NA 21 166
7 I Max NA 158
8 J NA 22 171
9 K Walt 21 NA