2017-05-02 39 views
1

嗨我想刪除特定短語之前的行,然後在稍後出現的相同(幾乎)短語之後。我想另一種看待它的方法是隻保留某個部分的開始和結束的數據。R - 如何在單個列中刪除特定短語之前和特定短語之後的行

我的數據如下:

df <- data.frame(time = as.factor(c(1,2,3,4,5,6,7,8,9,10,11,12,13)), 
       type = c("","","GMT:yyyy-mm-dd_HH:MM:SS_LT:2016-10-18_06:09:53","(K)","","","","(K)","(K)","","(K)","GMT:yyyy-mm-dd_HH:MM:SS_CAM:2016-10-18_06:20:03",""), 
       names = c("J","J","J","J","J","J","J","J","J","J","J","J","J")) 

,我想第一GMT:yyyy...短語之前和第二GMT:yyyy...短語後刪除所有內容。所以最終產品將是

time type             names 
3  GMT:yyyy-mm-dd_HH:MM:SS_LT:2016-10-18_06:09:53   J 
4  (K)              J 
5                J 
6                J 
7                J 
8  (K)              J 
9  (K)              J 
10                J 
11  (K)              J 
12  GMT:yyyy-mm-dd_HH:MM:SS_LT:2016-10-18_06:20:03   J 

我認爲subset可能工作,但它給我的問題。

回答

2

使用grep,您可以找到您的型樣行的指標:

ind=grep("^GMT",df$type) 

然後,你可以只保留兩個指標之間的行:

df=df[ind[1]:ind[2],] 
+0

你並不是真的需要'as.character'('grep'能夠處理因素)或'value = FALSE'(這是默認的),甚至是'^'(對於這個例子,無論如何),但這是一個好答案。 – alistaire

+2

你是對的。我編輯了我的答案,以刪除'as.character'和'value = F'。爲了額外的安全,我已經離開了^。 – Lamia

1
library(tidyverse) 
library(stringr) 

df2 <- df %>% slice(str_which(type, "GMT")[1]:str_which(type, "GMT")[2]) 
+1

你可以使用'which.min'和'which.max'來簡化一下,或者更好的,只需使用'str_which',這與'grep'等同於'value = FALSE'。 – alistaire

+0

@alistaire謝謝。我已經更新了我的答案。 – www

相關問題