r - 如何从列中提取部分数据并使用 R 将其粘贴到另一列中?
问题描述
我想从一列中提取部分数据并使用 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 +3579514862
3 J Sydney +0123458796 NULL
4 Ricky Delhi +5554848123
我想在适用的情况下将电话号码与国家列分开并将其放入手机中。
输出应该是,
> data
names country mobile
1 Sia London +1234567890
2 Ryan Paris +3579514862
3 J Sydney +0123458796
4 Ricky Delhi +5554848123
解决方案
您可以使用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
编辑 如果您想在没有管道的情况下执行此操作(我不建议这样做,因为代码变得更加难以阅读),您可以这样做:
select(mutate(separate(as_tibble(data), country, c("country", "number"), sep = " ", fill = "right"), mobile = coalesce(mobile, number)), -number)
推荐阅读
- python - python REST服务器PUT不更新值
- mysql - 在同一张表中 LEFT JOIN 11 次
- mysql - 根据其他左连接计算左连接
- fortran - 当输入名称列表文件中缺少名称列表变量时,如何引发运行时错误?
- c++ - 在 Windows 上的不同构建目录中运行 cmake
- javascript - JavaScript:替换网页上的(全部)某些单词
- c - 如何在 C 中使用 memset 为 Struct 成员设置随机数量的随机小写字符
- html - 如何使用 Markdown 使文本居中?
- c++ - 将两个二维数组放入文本文件
- android - 我们如何在布局中剪切出地图对象?