Как извлечь часть данных из столбца и вставить его в другой столбец, используя R? - PullRequest
0 голосов
/ 19 мая 2019

Я хочу извлечь часть данных из столбца и вставить его в другой столбец, используя R:

Мои данные выглядят так:

names <- c("Sia","Ryan","J","Ricky")
country <- c("London +1234567890","Paris", "Sydney +0123458796", "Delhi")
mobile <- c(NULL,+3579514862,NULL,+5554848123)
data <- data.frame(names,country,mobile)
data
> data
  names            country     mobile
1   Sia London +1234567890 NULL
2  Ryan              Paris +5554848123
3     J Sydney +0123458796 NULL
4 Ricky              Delhi +5554848123

Я бы хотел отделить номер телефона от столбца страны, где это применимо, и поместить его в мобильный телефон.

Вывод должен быть,

> data
  names            country     mobile
1   Sia             London +1234567890    
2  Ryan              Paris +5554848123
3     J             Sydney +0123458796
4 Ricky              Delhi +5554848123

1 Ответ

1 голос
/ 19 мая 2019

Вы можете использовать пакет tidyverse, который имеет функцию separate.

Обратите внимание, что я скорее использую NA вместо NULL внутри мобильного вектора.Кроме того, я использую опцию stringsAsFactors = F при создании кадра данных, чтобы избежать работы с факторами.

names <- c("Sia","Ryan","J","Ricky")
country <- c("London +1234567890","Paris", "Sydney +0123458796", "Delhi")
mobile <- c(NA, "+3579514862", NA, "+5554848123")
data <- data.frame(names,country,mobile, stringsAsFactors = F)

library(tidyverse)

data %>% as_tibble() %>% 
  separate(country, c("country", "number"), sep = " ", fill = "right") %>% 
  mutate(mobile = coalesce(mobile, number)) %>% 
  select(-number)

# A tibble: 4 x 3
  names country mobile     
  <chr> <chr>   <chr>      
1 Sia   London  +1234567890
2 Ryan  Paris   +3579514862
3 J     Sydney  +0123458796
4 Ricky Delhi   +5554848123

EDIT Если вы хотите сделать это без каналов (что я бы не сталрекомендуем, потому что код становится намного труднее читать) вы можете сделать это:

select(mutate(separate(as_tibble(data), country, c("country", "number"), sep = " ", fill = "right"), mobile = coalesce(mobile, number)), -number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...