如何提取两个字符之间的数据帧的行

时间:2018-08-24 15:12:26

标签: r

我有一些要整理的结构不良的数据。我有一个关键字列表,可用于从CSV文件提取数据帧。我的原始数据的结构大致如下: 有7列带有值的列,第一列都是字符串标识符,例如信用等级或国家/地区符号(用于FX数据),而其他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: ...

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以做类似的事情

start <- which(df$column1 == "credit")
end   <- which(df$column1 == "FX")
df[start:(end-1), ]

当然,如果“ credit”或“ FX”多次出现在该列中,则将不起作用。

答案 1 :(得分:0)

使用Brian的建议:

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

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

答案 2 :(得分:0)

我仍然不是100%地确定您要完成什么,但这是否可以满足您的需要?

 I have the "AspNetCoreModule" installed and enabled in IIS
 Both dev machine and server are running the same versions of the following:
   dotnet
   node