Соедините два столбца в один в SpatialDataFrame, но пропустите NA в R - PullRequest
3 голосов
/ 04 марта 2020

Я пытаюсь соединить два столбца SpatialDataFrame (shapefile) в один с помощью программы R, но в обоих столбцах есть пустые места, когда они вместе с именем плюс NA, однако я бы не хотел, чтобы NA появиться в моей новой колонке. Я использовал функцию вставки. как то так:

  This is the structure of my SpatialDataFrame:


  ID           city                city2
1  1      saõ paulo                 <NA>
2  2      Rio de Janeiro            <NA>
3  3           <NA>            Belo Horizonte
4  4           <NA>            Curitiba

обс. мои исходные данные не такие и имеют больше столбцов

Я использовал это:

data$newCity <- paste(data$city, data$city2) # I don't want to show in my data Na

1.

ID          city          city2                newCity
  1      saõ paulo         <NA>            saõ paulo NA
  2  Rio de Janeiro        <NA>            Rio de Janeiro NA
  3        <NA>       Belo Horizonte       NA Belo Horizonte
  4        <NA>       Curitiba             NA Curitiba

На самом деле это будет желаемый результат:

ID          city          city2                 newCity
 1      saõ paulo         <NA>                saõ paulo
 2    Rio de Janeiro      <NA>               Rio de Janeiro
 3        <NA>         Belo Horizonte         Belo Horizonte
 4        <NA>          Curitiba              Curitiba

Ответы [ 4 ]

2 голосов
/ 04 марта 2020

Другой вариант base R может быть:

with(df, pmax(city, city2, na.rm = TRUE))

[1] "sao paulo"      "rio de janeiro" "Belo Horizonte" "Curitiba" 
1 голос
/ 04 марта 2020

Вы можете использовать unite() в tidyr:

library(tidyr)

df %>%
  unite(newCity, city:city2, remove = F, na.rm = T)

Аргумент na.rm = T работает только для символьных столбцов.

1 голос
/ 04 марта 2020

Использование paste склеивает столбцы символов вместе, разделенные пробелом, то есть "_". Попробуйте это:

data$newCity <- ifelse(is.na(data$city), data$city2, data$city)
0 голосов
/ 04 марта 2020

Вы можете использовать функцию coalesce из dplyr пакета:

df <- data.frame(ID = 1:4,
                 city = c("sao paulo", "rio de janeiro", NA, NA),
                 city2 = c(NA, NA, "Belo Horizonte", "Curitiba"), stringsAsFactors = FALSE)


library(dplyr)
df %>% mutate(City = coalesce(city, city2))
  ID           city          city2           City
1  1      sao paulo           <NA>      sao paulo
2  2 rio de janeiro           <NA> rio de janeiro
3  3           <NA> Belo Horizonte Belo Horizonte
4  4           <NA>       Curitiba       Curitiba
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...