2017-08-13 60 views
-2

我正在使用R來執行一些數據操作。我想提取模式的兩次出現之間的所有行。我附加了數據幀圖像。提取數據幀列中兩個模式發生之間的數據R

我想使用「標記」作爲模式提取從'edu-hist-mark'到'objectives-mark'的所有行。但我不確定如何實現這一點。感謝任何幫助。 謝謝。

編輯: 一些操作之後,這裏是數據幀:

輸入代碼在這裏

數據< - data.frame(CLASS_NAME = C( 「EDU-HIST-標記」,」日期「‘日期’,‘教育’,‘資格賽’,‘日期’,‘日期’,‘教育’,‘資格賽’,‘角色’,‘公司’,‘目標標記’,」附加信息 - 愛好標記「,」名義「), text_val = c(」教育和資格:「,2000,2003,」伊利諾伊理工學院「,」科學碩士,計算機科學「,1999,2000,」MAHARASHTRA INSTITUTE OF技術「,」理學學士「,」機械工程師「荷蘭國際集團」,‘企業解決方案架構師’,‘聯絡技術’,‘總結:出版物:’,‘阿沛Daftari’))

+1

請不要張貼屏幕截圖。請使用'dput'分享您的數據。 – www

+0

如果您的數據是以數據庫的形式存在的,則每行的行數不會相同。沒有代碼/更好的解釋很難猜出你想實現什麼 – xhudik

+0

@xhudik:我在這裏看到的唯一模式是有些行有「mark」這個詞,我想用它來提取它們之間的所有行。數據不是來自數據庫。但我正在處理很多數據幀,並且都有列名稱,如'edu-hist-mark'或包含單詞'mark'的某個列名稱。 – Vishnu

回答

0

在下面的代碼,我發現情況的指數在您的第一列包含模式「標記」,然後對數據集進行子集分析,以查找該模式的第一個和第二個實例之間的所有行。如果該模式有兩個以上的實例,則可以更改索引以反映應該如何對數據進行子集化。希望這可以幫助!

Data[c(c(as.list(which(grepl("mark", Data$class_name)))[[1]]:as.list(which(grepl("mark", Data$class_name)))[[2]])), ] 
+0

@ sparkh20:這個工程!非常感謝。我有問題,但是:如果我想選擇以「edu-hist-mark」開頭的所有行到「hist」的下一個出現位置,我如何修改代碼。我問這是因爲我正在處理大量的數據幀,而「edu-hist-mark」可能並不總是出現在數據幀的頂部。 – Vishnu

+0

@ sparkh20:對上述問題抱歉。這很明顯。我想問的是,如果我想選擇以「edu-hist-mark」開頭的所有行到數據框的末尾,我該如何修改代碼?感謝您的幫助,謝謝! – Vishnu

+0

@Vishnu:由於「edu-hist-mark」是數據中「標記」模式的第一個實例,因此可以使用以下方法從數據中迭代到數據的末尾:'Data [c(c(as .list(which(grepl(「mark」,Data $ class_name)))[[1]]:nrow(Data))),]'。你可以改變這段代碼,從標記模式的第二個實例(目標標記)迭代到最後,只需將上面的代碼更改爲:Data [c(c(as.list(which(grepl(「mark」,Data $ class_name)))[[2]]:nrow(Data))),]'。樂意效勞! – sparkh2o

相關問題