首页 > 解决方案 > 如何在两个字符之间提取数据框的行

问题描述

我有一些结构很差的数据要清理。我有一个关键字列表,可用于从 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: ...

标签: r

解决方案


使用布赖恩的建议:

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]))

这行得通。凌乱的数据,所以我仍然有需要保留偏移行的烦人情况。


推荐阅读