我有2個虛擬變數
physical_violence和sexual_violence.我嘗試將它們與ifelse()函式和|-運算子結合起來,創建一個虛擬變數,如果至少發生過一次暴力,則回傳1。
下面的方法輸出了不同的結果:
df < - mutate(df, physical_violence = iffelse(e03bidummy = 1 | e03cidummy == 1 |
e03didummy == 1 | e03eidummy == 1 | e03fidummy == 1 |
e03gidummy == 1 | e03hidummy == 1 | e03iidummy == 1 |
e03jidummy == 1,/span> 1。 0))
df < - mutate(df, sexual_violence = ifelse(e04aidummy = 1 |)
e04bidummy == 1 | e04cidummy == 1 | e04didummy == 1 , 1, 0))
結合上述兩個變數的虛擬人的代碼:
df <- mutate(df, physical_sexual_violence =
ifelse(physical_violence == 1 | sexual_violence == 1, 1, 0))
我得到的結果是。
table(df$physical_sexual_violence)。# 875個 "是",26.614個 "否"`。
這與字典中的內容相矛盾:
table(df$physical_violence):table(df$sexual_violence)#634 "是 "和26.855 "否"。
我預計有1.480個暴力案件。
誰能幫我看看?
誰能幫助我確定我做錯了什么?
uj5u.com熱心網友回復:
當我們有可以簡化為每行單一的真/假的ROWISE邏輯操作時,我們可以使用dplyr::if_any或dplyr::if_all。
-) 首先mutate()。if_any其名稱匹配重碼"e03[b-j]idummy"的變數,是.x==1,physical_violence將是 TRUE(這個值為1)。
-) 第二個mutate使用類似的邏輯,以及你給的其他引數。
-) 第三個突變將輸出1 if_any 其他兩個新列是1。
虛擬資料
e03bidummy e03cidummy e04aidummy e04bidummy
1 1 0 0 0
2 0 1 0 0
3 0 0 1 1
4 0 0 0 0
用dplyr解決
library(dplyr)
df %> % mutate(physical_violence= if_any(matches("e03[b-j]idummy")。 ~. x==1),
sexual_violence = if_any(matches("e04[a-d]idummy")。 ~. x==1),
physical_sexual_violence= if_any(包含(' violence')))
e03bidummy e03cidummy e04aidummy e04bidummy 身體暴力 sexual_violence 身體性_violence
1 1 0 0 0 1 0 1
2 0 1 0 0 1 0 1
3 0 0 1 1 0 1 1
4 0 0 0 0 0 0 0
如果所有的虛擬變數都是嚴格意義上的0或1,代碼可以進一步簡化,省略.x==1部分,因為在求和操作中,邏輯被隱含地強制為1/0:
df %> % mutate(physical_violence = if_any(matches("e03[b-j]idummy"))。
sexual_violence = if_any(/span>matches("e04[a-d]idummy"))。
physical_sexual_violence= if_any(包含(' violence')))
uj5u.com熱心網友回復:
這有幫助嗎?當然,你需要為你的變數名稱進行調整。
示例資料框架:
# just a synthetic sample dataframe
df <- data. frame(physical_violence = c(0。 0。 1, 0。 1), # 假設沒有NA。
sexual_violence = c(0。 1。 1, 1。 0)) # 假設沒有NA
for-loop if-else陳述句:
for(i in 1: nrow(df)){
df$dummy[i] <- NA
if(df$physical_violence[i]== 0 &。 df$sexual_violence[i]== 0) {
df$dummy[i] <- FALSE
} else {>
df$dummy[i] <- TRUE
}
}
輸出:
df
#> physical_violence sexual_violence dummy
#> 1 0 0 FALSE
#> 2 0 1 TRUE
#> 3 1 1 TRUE
#> 4 0 1 TRUE
#> 5 1 0 TRUE
創建于2021-09-13,由reprex包(v2.0.1)創建
。注意,這種方法既不是最快的,也不是最安全的方法,但對于初學者來說,這種語法很容易理解。
編輯:如果你需要0-1,只需將TRUE替換為1,將FALSE替換為0。(如果需要,不要忘記將df$dummy改為因子變數。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/314489.html
標籤:
下一篇:矢量上的ifelse函式
