合并列,但仅当没有列具有NA或空白时

时间:2019-12-06 05:47:59

标签: r dplyr tidyverse tidyr

我尝试使用tidyverse合并两列,但仅限且仅当这些列均不包含任何NA或空白时。

有什么想法吗?

df <- expand.grid(x = c(1, NA), y = c(2, NA))   
df  

df <- df %>% unite("new", x, y, sep = ", ", remove = FALSE, na.rm = TRUE)   
df

1 个答案:

答案 0 :(得分:0)

我们可以创建一个函数来执行此操作。根据{{​​1}}所需的列对数据进行分组,检查该列中是否有unite个NA元素,并且存在any,则不要执行{{1} }或if unite

else

unite中,我们可以做到

library(dplyr)
f1 <- function(data, cols){
        v1 <- data %>%
            summarise_at(vars(cols), ~ any(is.na(.)|.=="")) %>%
            unlist %>%
            sum
     if(v1 ==0){ data %>%
                 unite(new, cols, sep, ",", remove = FALSE, na.rm = TRUE) } else data
  }
f1(df, c('x', 'y'))

并在base Rcols <- c('x', 'y') i1 <- sum(colSums(is.na(df[cols])|df[cols] == "")) == 0 i1这些列中使用条件

unite