r - 在 R 中交换错位的单元格?
问题描述
我有一个庞大的数据库(超过 65M 的行),我注意到一些单元格放错了位置。例如,假设我有这个:
library("tidyverse")
DATA <- tribble(
~SURNAME,~NAME,~STATE,~COUNTRY,
'Smith','Emma','California','USA',
'Johnson','Oliia','Texas','USA',
'Williams','James','USA','California',
'Jones','Noah','Pennsylvania','USA',
'Williams','Liam','Illinois','USA',
'Brown','Sophia','USA','Louisiana',
'Daves','Evelyn','USA','Oregon',
'Miller','Jacob','New Mexico','USA',
'Williams','Lucas','Connecticut','USA',
'Daves','John','California','USA',
'Jones','Carl','USA','Illinois'
)
=====
> DATA
# A tibble: 11 x 4
SURNAME NAME STATE COUNTRY
<chr> <chr> <chr> <chr>
1 Smith Emma California USA
2 Johnson Oliia Texas USA
3 Williams James USA California
4 Jones Noah Pennsylvania USA
5 Williams Liam Illinois USA
6 Brown Sophia USA Louisiana
7 Daves Evelyn USA Oregon
8 Miller Jacob New Mexico USA
9 Williams Lucas Connecticut USA
10 Daves John California USA
11 Jones Carl USA Illinois
如您所见,国家和州在某些行中放错了位置,我怎样才能有效地交换这些?
亲切的问候,路易斯。
解决方案
使用data.table
和内置state.name
向量:
setDT(DATA)
DATA[COUNTRY %in% state.name, `:=`(COUNTRY = STATE, STATE = COUNTRY)]
DATA
# SURNAME NAME STATE COUNTRY
# 1: Smith Emma California USA
# 2: Johnson Oliia Texas USA
# 3: Williams James California USA
# 4: Jones Noah Pennsylvania USA
# 5: Williams Liam Illinois USA
# 6: Brown Sophia Louisiana USA
# 7: Daves Evelyn Oregon USA
# 8: Miller Jacob New Mexico USA
# 9: Williams Lucas Connecticut USA
# 10: Daves John California USA
# 11: Jones Carl Illinois USA
推荐阅读
- linux - 使用 Linux 查找包含特定字符串的文件并复制到目录
- c# - 将 json 反序列化为具有泛型类型的基础对象
- bash - 运行程序避免覆盖输出
- python - 如何将for循环输出转换为python列表
- javascript - 在模态框上显示模态框,但第二个模态框正在关闭。离子 3
- reactjs - 根据呈现的内容更新导航面板样式
- android - Android:两部手机都在录制音频时,Skype 通话无法正常工作
- android - 登录用户的iandroid webview缓存问题
- perforce - Perforce,可以搁置提交的更改吗?
- linux - 如何将用户名附加到文件名中