Вставьте столбцы вместе, чтобы NA не стали символами - PullRequest
0 голосов
/ 11 октября 2018

У меня довольно большой набор данных, в котором есть несколько пропущенных и повторяющихся значений.Моя первая цель - создать новый столбец (Name), который состоит из трех существующих столбцов, например, FirstName, MiddleInitial и LastName.

Я пробовал:

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

но это приводит к вставке NA s как символов, а не просто NA.После этого я собирался удалить каждую строку, в которой есть NA в моем новом столбце.

Кто-нибудь уверен в том, как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вставьте столбцы, используя 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
0 голосов
/ 11 октября 2018

Вот один из подходов, использующий вектор компонентов имени с 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"

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...