【问题标题】:Unite Columns but only if no column has NA or blank合并列,但前提是没有列具有 NA 或空白
【发布时间】:2019-12-06 05:47:59
【问题描述】:

我正在尝试使用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

【问题讨论】:

  • 您能否展示给定示例的预期输出?

标签: r dplyr tidyverse tidyr


【解决方案1】:

我们可以创建一个函数来做到这一点。根据unite所需的列对数据进行子集,检查该列中是否有any NA元素,并且if存在,然后不要执行uniteelseunite他们

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 R,我们可以做

cols <- c('x', 'y')
i1 <- sum(colSums(is.na(df[cols])|df[cols] == "")) == 0  

并使用i1unitepaste 这些列的条件

 df$new <- if(i1) do.call(paste, c(df[cols], sep=",")) else NULL   

【讨论】:

  • 功能似乎不起作用。你能检查一下吗
  • @mike 对我来说,它适用于您提供的数据
猜你喜欢
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2021-04-01
  • 1970-01-01
  • 2021-11-12
相关资源
最近更新 更多