我的數據幀是如下Grepl匹配多個條件,包括「與」和「或」條件
df <- data.frame(c("Utility grid", "Grid connection", "Grid", "", "", "Dry-cell-torch", "Solar", ""), c("solar", "", "", "", "", "", "Dry-cell-torch", ""), c("", "fan", "TV", "", "Utility grid connection", "", "", "Unreachable"), c("", "radio", "", "", "", "", "", ""))
colnames(df) <- c(paste("de_", 1:4, sep=""))
我想追加一個第5列「德」這個數據框具備以下條件 -
條件1,如果所有的行是空的,例如4行中,「去」應該是0。
條件2.如果只有4行的非空,並且該值可以是「包含' 「G RID」而不區分大小寫,或者是‘不可到達’,或者是‘幹細胞火炬’,然後‘的’應該是0。
條件3否則‘的’應爲1
期望的「德」應該是
df$de <- (c(1, 1, 1, 0, 0, 0, 1, 0))
請注意我的原數據幀是600行,45列。我只是把一個子集放在這裏,但這個子集說明了我想完成的詳盡條件。
所以我試着用grepl以下的正則表達式(改編自你這裏一個不同但類似的問題在計算器給出解決辦法) -
df$de <- (!grepl("grid|Unreachable|Dry-cell-torch|^$",
apply(df,1,paste, collapse=""), ignore.case=TRUE))+0L
這個工程除了在情況下,讓我們在說第1行,其中1列中有「公用事業網格」,第二個中我有「太陽能」,它使我得到0,而我需要1.我瞭解問題 - 如果網格,無法訪問等是一個目前這應該與一個'和'條件的所有其他單元格在同一行應該是空白,但我無法計算如何實現此
我感謝您的幫助!
你說很多行而不是列,你能清理你的問題嗎? –
如果您正在檢查4列中的任何一列是否有值,然後檢查值是否爲「無法到達」或「幹細胞火炬」,則我對您在查找條件2時感到困惑。或包含「網格」。然後每個德值將爲0爲您的示例。 –
穆迪,那是因爲我的意圖是行而不是列。所以我希望R代碼遍歷4列中的每一行,並檢查列出的3個條件,並相應地爲de賦值。馬特在條件2中,如果任何列是「無法到達」或「幹細胞炬」或包含「網格」,並且如果列除了這些值之外還有非空值,則de應該是1 else應該是0. – user3816784