[英]Filter & Subset if a String Contains Certain Characters at specific position (in 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
會產生一個邏輯,因此您可以使用|
操作來選擇您的行。 另外,我只是想快速檢查一下您的代碼中可能會給您帶來麻煩的幾個地方。
grep
語句開頭的x$column1 & x$column2
意味着該函數將嘗試對column1
和column2
每個條目成對運行&
操作。 由於這些是字符而不是邏輯,這會產生一些奇怪的結果。
在grep
,您嘗試匹配的pattern
出現在您嘗試匹配的字符串之前,因此它應該是grep("Aisle", columnValue)
而不是相反。 運行?functionName
將為您提供有關該函數的信息,因此您不必嘗試從記憶中找出答案。
filter
是時間序列 ( ts
) 對象的函數,而不是數據幀。 我很驚訝您以這種方式使用它沒有出錯。
祝你好運。 如果您想澄清任何事情,請發表評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.