我有凌乱的数据。我想根据列中的短语对数据进行子集化直到最后。
df1 <- data.frame(
V1=c("No. de Control Interno de", "la Partida / Concepto de Obra","",
"LO-009J0U004-","E50-2021",""),
V2=c("","Descripción Breve","Trabajos de señalamiento horizontal en puente de",
"cuota \"El Zacatal\", consistentes en suministro y","aplicación de pintura de tránsito, suministro y",
"colocación de botones y ménsulas reflejantes."),
V3=c("","ClaveCUCOP","","","62502002",""),
V4=c("Unidad","Observaciones de Medida","","","Obra",""),
V5=c("","Cantidad","","","1","")
)
Run Code Online (Sandbox Code Playgroud)
无论何时V2,都有短语Descripción,代码应该从该行到最后对数据帧进行子集化。例如,在上面的例子中,这意味着从第 2 行到第 6 行选择数据。我正在尝试使用str_detectfrom stringrpackage。
您可以使用该which()函数返回索引 where str_detect()is TRUE。
library(stringr)
which(str_detect(df1$V2, "Descripción"))
[1] 2
Run Code Online (Sandbox Code Playgroud)
相反,如果您将 的输出保存which()到变量,则可以使用它来对数据进行子集化。请注意,x如果有多个地方str_detect返回 true ,则后续会显式调用第一个值。
x <- which(str_detect(df1$V2, "Descripción"))
df1[x[1]:nrow(df1),]
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)V1 V2 V3 V4 V5 2 la Partida / Concepto de Obra Descripción Breve ClaveCUCOP Observaciones de Medida Cantidad 3 Trabajos de señalamiento horizontal en puente de 4 LO-009J0U004- cuota "El Zacatal", consistentes en suministro y 5 E50-2021 aplicación de pintura de tránsito, suministro y 62502002 Obra 1 6 colocación de botones y ménsulas reflejantes.