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