r - 文本清理:删除错误字符
问题描述
我有一个名为“义务”的列,其中有每个财政年度的财务价值,例如“(项目赠款)FY 17$XX.XX; FY 18 est $XX.XX; FY 19 est $XX.XX; FY 16$ XX.XX;" 我最终尝试选择每个值并将它们放入新列中以获得正确的 FY,但是,首先我尝试使用一些工具(即 stringr)来消除我想要的信息周围的噪音。并非列中的每个实例都以 (Project Grants) 开头,它们有很多,所以我将继续在我的 if 语句中为不同类型使用 ELIF 选项。该代码没有从我的问题文本中删除(项目资助)。
我认为为这个过程创建一个函数可能会更好,但我是这门语言的新手,不知道从哪里开始或如何创建函数,因此我选择先删除字符,然后最终使用 extract()创建我需要的列。
data %>%
select(Obligations..122.)%>%
if(starts_with(Obligations..122.) = "(Project Grants)"){
str_sub(data$Obligations..122., start = 16)
}
head(data$Obligations..122.)
[1] "(Project Grants) FY 17$45,381,885.00; FY 18 est $35,000,000.00; FY 19
est $35,000,000.00; FY 16$45,381,885.00; - "
[2] "(Salaries and Expenses) FY 17$243,631,584.00; FY 18 est
$256,467,514.00; FY 19 est $193,289,258.00; FY 16$239,406,515.00; - APHIS
has a difference between budget authority and obligations because there is
carryover funding available from no year funding.\n"
输出将是我拥有原始列 Obligations..122 的位置。紧随其后的是 FY16/FY17/... 等等,您在上面的输出中看到的值。
解决方案
使用该select
步骤,它仅选择单个列,因此,多个列可能无法用于if
下面的步骤。相反,它可以用mutate_at
library(dplyr)
library(stringr)
library(tidyr)
data %>%
mutate_at(vars(starts_with("Obligations..122.")), ~ str_sub(. start = 16))
如果它只有一列,可以直接选择它,但要确保它用反引号引起来,因为列名有不寻常的字符
data %>%
group_by(newColumn = str_sub(`Obligations..122.`, start = 16)) %>%
mutate(ind = row_number(), i1 = 1) %>%
spread(newColumn, i1, fill = 0)
推荐阅读
- c - C函数指针使程序崩溃?
- mongodb - MongoDB Docker 初始化脚本
- ios - 如果初始化程序中未提供@Binding,如何使用@State
- matlab - 如何在 matlab 中选择交叉验证中的最佳模型?
- azure - ASP.NET Core 令牌获取异常
- python - 通过 HTML 和 SQL 炼金术表单更新数据库不起作用
- r - r 如何根据 Pr 值从 r 摘要(模型)中选择截距/变量
- python - ModuleNotFoundError:没有名为“samples.coco”的模块
- python-3.x - python3在命令中插入变量值
- react-native - BackHandler.exitApp() 时重置 Linking.getInitialURL()