如何从列中提取一部分数据,然后使用R将其粘贴到另一列中?

时间:2019-05-19 10:29:29

标签: r dataframe dplyr

我想从一列中提取一部分数据,然后使用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 个答案:

答案 0 :(得分:1)

您可以使用具有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