我试图清理下面的tibble工资栏:
| 最低工资|最高工资|
| --|--|
| 65K| 75K|
| 65K| 75K|
| 65K| 75K|
| 56.3K | 90.8K |
| 61.7K |105K|
| 四万五千三百六十|八万四千二百四十|
我不知道如何使上述两个工资列的方式,只有数字(没有标点符号,没有“K”字符)。
我尝试了三种不同的方法。这三种情况的结果都一样。
1)
yearly %>%
mutate(min_salary = case_when(grepl("K", min_salary) ~
as.numeric(gsub("[^0-9.]", "", min_salary)) * 1000, TRUE ~
as.numeric(min_salary)),
max_salary = case_when( grepl("K", max_salary) ~
as.numeric(gsub("[^0-9.]", "", max_salary)) * 1000, TRUE ~
as.numeric(max_salary)
)
)
2)
yearly %>%
mutate( min_salary = ifelse(grepl("K", min_salary),
as.numeric(gsub("[^0-9.]", "", min_salary)) * 1000,
as.numeric(min_salary)),
max_salary = ifelse(grepl("K", max_salary), as.numeric(gsub("
[^0-9.]", "", max_salary)) * 1000, as.numeric(max_salary)))
3)
yearly %>%
mutate(min_salary = ifelse(str_detect(min_salary, "K"),
as.numeric(gsub("[^0-9.]", "", min_salary)) * 1000,
as.numeric(min_salary)),
max_salary = ifelse(str_detect(max_salary, "K"),
as.numeric(gsub("[^0-9.]", "", max_salary)) * 1000,
as.numeric(max_salary)))
结果
一声轻喝:
| 最低工资|最高工资|
| --|--|
| 65000 | 75000 |
| 65000 | 75000 |
| 65000 | 75000 |
| 56300 | 90800 |
| 61700 | 105000 |
| NA| NA|
查看更多行使用print(n = ...)
查看更多行警告消息:mutate()
中有2个警告。第一个警告是:在论证中:min_salary = ifelse(...)
。由于ifelse()
中的警告引起:强制引入的!NA运行dozr::last_dozr_warnings()以查看剩余的1个警告。
我怎么能不生成“NA”?NA行是原始组中没有“K”的行。
1条答案
按热度按时间w1e3prcc1#
您可以创建一个快速帮助函数,然后将其应用于列。我添加了
tidyverse
和base R选项:示例数据
代码:
将其应用于
dplyr
/magrittr
链:在基R中使用
lapply