有没有一种方法可以使用everything()函数,但不包含所有内容?

pw136qt2  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(103)

我有一个类似于下面这个的框架。我正在尝试绘制各行的值的组合。我做得很对,但我的问题是NA值。我的框架中的每一行都至少包含一个NA值,所以使用na.omit是不可能的。

df <- df %>% unite(combined, everything(!NA), sep = "_")
count_data <- df %>%count(combined)
ggplot(count_data, aes(y = fct_reorder(combined, n), x = n)) +geom_bar(stat = "identity") +labs(title = "Row Counts by Combination of Variables", y = "Combination", x = "Count")

| 一|B| C| D|
| --|--|--|--|
| 1 | 2 | 3 |NA|
| NA| 2 | 4 | 5 |
| NA| NA| NA| 6 |
| 5 | 7 |NA| NA|
我什么都试过了!NA)但这不起作用。我没有得到错误,但它只是绘制计数,而不是组合变量计数。我也可以不使用everything()函数!

vmdwslir

vmdwslir1#

tidyselect::everything()tidy-select通常用于指定帧中的变量集合(即,列)。
虽然tidyr:unite()知道na.rm

library(dplyr, warn.conflicts = FALSE)
library(tidyr)

df <- tibble::tribble(
  ~a, ~b, ~c, ~d,
  1L, 2L, 3L, NA,
  NA, 2L, 4L, 5L,
  NA, NA, NA, 6L,
  5L, 7L, NA, NA,
  NA, NA, NA, NA
)

df %>% 
  # remove all-NA rows
  filter(!if_all(everything(), is.na)) %>% 
  unite(combined, everything(), sep = "_", na.rm = TRUE)
#> # A tibble: 4 × 1
#>   combined
#>   <chr>   
#> 1 1_2_3   
#> 2 2_4_5   
#> 3 6       
#> 4 5_7

创建于2023-09-28带有reprex v2.0.2

相关问题