我尝试使用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
答案 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 R
至cols <- c('x', 'y')
i1 <- sum(colSums(is.na(df[cols])|df[cols] == "")) == 0
或i1
这些列中使用条件
unite