将列粘贴在一起而不让 NA 成为字符

Paste columns together without NAs becoming characters

我有一个相当大的数据集,其中有多个缺失值和重复值。我的第一个目标是创建一个由三个现有列组成的新列 (Name),例如FirstNameMiddleInitialLastName

我试过:

owners4$Name <- paste(owners4$FirstName, owners4$MiddleInitial, owners4$LastName)

但这会导致 NA 被粘贴为字符,而不仅仅是 NA。 在此之后,我将删除新列中包含 NA 的每一行。

有人确定我可以实现这个目标的方法吗?

这是一种使用名称组件向量的方法 anyNA():

FirstName <- "John"
MiddleInitial <- NA
LastName <- "Jones"
name <- c(FirstName, MiddleInitial, LastName)

x <- ifelse(anyNA(name), NA, paste(name, collapse=" "))
x
[1] NA

MiddleInitial <- "P"
name <- c(FirstName, MiddleInitial, LastName)
x <- ifelse(anyNA(name), NA, paste(name, collapse=" "))
x
[1] "John P Jones"

Demo

使用 na.omit 粘贴列,参见示例:

# reproducible example
owners4 <- data.frame(FirstName = c("Aa", "Bb", NA),
                      MiddleInitial = c("T", "U", NA),
                      LastName = c(NA, "Yyy", NA))

owners4$Name <- apply(owners4[, c("FirstName", "MiddleInitial", "LastName")], 1,
                      function(i){ paste(na.omit(i), collapse = " ") })

owners4
#   FirstName MiddleInitial LastName     Name
# 1        Aa             T     <NA>     Aa T
# 2        Bb             U      Yyy Bb U Yyy
# 3      <NA>          <NA>     <NA>         

现在过滤掉名称为空的行

result <- owners4[ owners4$Name != "", ]
result
#   FirstName MiddleInitial LastName     Name
# 1        Aa             T     <NA>     Aa T
# 2        Bb             U      Yyy Bb U Yyy