我的資料看起來像這樣
Q3A1<-c(0,1,0,1,1,1,0,1,0,1)
Q3A2<-c(0,1,1,1,0,1,0,0,0,1)
Q3A3<-c(1,1,0,1,0,1,0,0,0,1)
我想創建一個新變數 Q3L,當 Q1A1、Q1A2 和 Q1A3 都等于 1 時它被編碼為 1
我試過這個
dataQ$Q3L <- ifelse(dataQ$Q3A1==1|dataQ$Q3A2==1|dataQ$Q3A3==1, 1, 0 )
但是如果三個中的至少一個等于 1,它似乎重新編碼為 1,但我需要它們的樹等于 1
我也試過這個
library(dplyr)
dataQ %>%
mutate(Q3L = case_when(Q3A1 == 1 & Q3A2 == 1 & Q3A3 == 1 ~ 1,))
也不成功
uj5u.com熱心網友回復:
我們可以使用if_all- 通過遍歷列名中包含starts_with'Q3A' 的列,創建一個邏輯條件來檢查列值是否為 1 ( .x == 1),僅當一行的所有列都為 TRUE 時if_all回傳,即全為 1,然后強制TRUE邏輯 ( TRUE/FALSE) 與 或二進制as.integer
library(dplyr)
dataQ <- dataQ %>%
mutate(Q3L = (if_all(starts_with('Q3A'), ~ .x== 1)))
注意:在可變數量的列上使用|or&可能會很麻煩,而是使用if_allor 創建邏輯 withrowSums
資料
dataQ <- data.frame(Q3A1, Q3A2, Q3A3)
uj5u.com熱心網友回復:
更新:感謝@LMc 的輸入:更通用的方法是:
library(dplyr)
tibble(Q3A1, Q3A2, Q3A3) %>%
mutate(Q3L = ifelse(select(., contains("Q3")) %>%
rowSums() == ncol(.), 1, 0))
第一個答案:
我們可以檢查rowSums并應用一個ifelse陳述句:
library(dplyr)
tibble(Q3A1, Q3A2, Q3A3) %>%
mutate(Q3L = ifelse(select(., contains("Q3")) %>%
rowSums() == 3, 1, 0))
Q3A1 Q3A2 Q3A3 Q3L
<dbl> <dbl> <dbl> <dbl>
1 0 0 1 0
2 1 1 1 1
3 0 1 0 0
4 1 1 1 1
5 1 0 0 0
6 1 1 1 1
7 0 0 0 0
8 1 0 0 0
9 0 0 0 0
10 1 1 1 1
uj5u.com熱心網友回復:
你可以這樣做:
dataQ["Q3L"] = (dataQ$Q3A1 & dataQ$Q3A2 & dataQ$Q3A3)
輸出:
Q3A1 Q3A2 Q3A3 Q3L
1 0 0 1 0
2 1 1 1 1
3 0 1 0 0
4 1 1 1 1
5 1 0 0 0
6 1 1 1 1
7 0 0 0 0
8 1 0 0 0
9 0 0 0 0
10 1 1 1 1
uj5u.com熱心網友回復:
library(dplyr)
df %>%
rowwise() %>%
mutate(Q3L = as.numeric(all(as.logical(c_across(starts_with("Q3")))))) %>%
ungroup()
或與purrr::pmap_dbl
library(purrr)
library(dplyr)
df %>%
mutate(Q3L = pmap_dbl(across(starts_with("Q3")), ~ all(.x == 1)))
或者purrr::reduce
df %>%
mutate(Q3L = as.numeric(reduce(across(starts_with("Q3")), `&`)))
輸出
Q3A1 Q3A2 Q3A3 Q3L
<dbl> <dbl> <dbl> <dbl>
1 0 0 1 0
2 1 1 1 1
3 0 1 0 0
4 1 1 1 1
5 1 0 0 0
6 1 1 1 1
7 0 0 0 0
8 1 0 0 0
9 0 0 0 0
10 1 1 1 1
這個怎么運作
兩個答案的作業原理相似。它們逐行并將行轉換為邏輯向量。all然后測驗逐行邏輯向量的每個元素是否為TRUE. 如果是則1回傳,否則回傳0。
purrr::reduce作業方式有點不同。對于每一行,它使用函式將逐行向量減少&為單個邏輯值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480300.html
上一篇:Swift:具有不同顏色的AttributedString下劃線
下一篇:如何訪問主代碼塊中的區域變數?
