r - 如何在两个字符之间提取数据框的行
问题描述
我有一些结构很差的数据要清理。我有一个关键字列表,可用于从 CSV 文件中提取数据帧。我的原始数据的结构大致如下:有 7 列的值,第一列都是字符串标识符,如信用评级或国家符号(用于外汇数据),而其他 6 列要么是标题,如百分比更改字符串(例如 +10%)或只是一个数值。由于我将所有这些数据集中在一起,因此我希望能够提取每个类别的数据。例如,我想在第一列中提取“credit”关键字和“FX”关键字之间的所有行。有没有办法在基础 R 或 dplyr 中轻松做到这一点?
例如。
df %>%
filter(column1 = in_between("credit", "FX"))
示例数据框:
row 1: c('random',-1%', '0%', '1%, '2%')
row 2: c('credit', NA, NA, NA, NA)
row 3: c('AAA', 1,2,3,4)
...
row n: c('FX', '-1%', '0%', '1%, '2%')
我想要以下输出:
row 1: c('credit', -1%', '0%', '1%, '2%')
row 2: c('AAA', 1,2,3,4)
...
row n-1: ...
解决方案
使用布赖恩的建议:
in_between <- function(df, start, end){
return(df[start:(end-1),])
}
然后遍历索引
dividers = which(df$column1 %in% keywords == TRUE)
并根据需要保存函数输出。
lapply(1:(length(dividers)-1), function(x) in_between(df, start = dividers[x], end = dividers[x+1]))
这行得通。凌乱的数据,所以我仍然有需要保留偏移行的烦人情况。
推荐阅读
- javascript - React/React-Native 最高效的 onChange 订阅方式
- python - Module not found error Kivy Python 3.6 Mac OS High Sierra
- rust - Lifetimes for method returning iterator of structs with same lifetime
- ios - On Demand Resource AppStore Upload Failure in iOS application - Disallowed Paths
- python - 排序后修剪字典的最佳方法是什么?
- android - TabLayout 中的嵌套片段不正确的布局膨胀
- angular5 - 如何修复Angular Material 2中mat-table水平滚动中的单列
- node.js - fiber@1.0.15 安装 node_modules/fibers 节点 build.js || nodejs build.js
- salt-stack - 我如何知道我的 salt-call 使用的是什么静态配置文件?
- mysql - java.sql.SQLException:ResultSet 来自 UPDATE。没有数据。对于所有查询