簡體   English   中英

如果字符串包含某些字符,則過濾和子集(在 R 中)

[英]Filter & Subset if a String Contains Certain Characters (in R)

我目前希望將數據幀划分為用於訓練/測試的子集。 在數據框中,有些列包含不同的項目,有些列包含子項目,如(Aisle01、Aisle02 等)。我通過過濾掉多列中的部分字符串而被絆倒了。

數據樣本:

Column1   Column2  Column3

Wall01    Wall04   45.6
Wall04    Aisle02  65.7
Aisle06   Wall01   45.0
Aisle01   Wall01   33.3
Wall01    Wall04   21.1

如果我的數據框 (x) 包含兩列,其中包含多個版本的“Aisle”,我希望從包含“Aisle”的兩列中過濾掉所有內容。 想知道下面的線路是否在正確的軌道上?

filter(x, column1 & column2 == grep(x$column1 & x$column2, "Aisle"))

想要的結果:

Column1  Column2  Column3

Wall04   Aisle02  65.7
Aisle06  Wall01   45.0
Aisle01  Wall01   33.3

提前謝謝你。

我能看到的最簡單的解決方案是:

x <- x[grepl("Aisle", x[["column1"]]) | grepl("Aisle", x[["column2"]]), ]

使用grepl而不是grep會產生一個邏輯,因此您可以使用| 操作來選擇您的行。 另外,我只是想快速檢查一下您的代碼中可能會給您帶來麻煩的幾個地方。

  1. grep語句開頭的x$column1 & x$column2意味着該函數將嘗試對column1column2每個條目成對運行&操作。 由於這些是字符而不是邏輯,這會產生一些奇怪的結果。

  2. grep ,您嘗試匹配的pattern出現在您嘗試匹配的字符串之前,因此它應該是grep("Aisle", columnValue)而不是相反。 運行?functionName將為您提供有關該函數的信息,因此您不必嘗試從記憶中找出答案。

  3. filter是時間序列 ( ts ) 對象的函數,而不是數據幀。 我很驚訝您以這種方式使用它沒有出錯。

祝你好運。 如果您想澄清任何事情,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM