簡體   English   中英

根據 R 中多列的條件添加新列

[英]add a new column based on conditions on multiple columns in R

我有一個這樣的數據框:

Q1 <- c("A",NA,"A",NA,NA,"C","D","A","B", NA)#the right answer is A
Q2 <- c("D",NA,"D","C",NA,NA,"A","A","A","A")#the right answer is D
Q3 <- c("B","B","C","A",NA,"A","B","D","E",NA)#the right answer is B
Q4 <- c("B",NA,"C","C","C","C","D","B",NA,"A")#the right answer is C
mydf <- data.frame(Q1,Q2,Q3,Q4)
mydf

這些是我測試中的問題,我想做的是創建一個名為“pass”的新列,並給參與者一個 pass,只要他們至少正確回答了 1 個問題。

我知道如何僅基於 1 列,如下所示:

mydf_new <- mydf %>% 
  mutate(Pass = if_else(Q1 %in% c("A"),"yes","no"))
mydf_new
     Q1   Q2   Q3   Q4 Pass
1     A    D    B    B  yes
2  <NA> <NA>    B <NA>   no
3     A    D    C    C  yes
4  <NA>    C    A    C   no
5  <NA> <NA> <NA>    C   no
6     C <NA>    A    C   no
7     D    A    B    D   no
8     A    A    D    B  yes
9     B    A    E <NA>   no
10 <NA>    A <NA>    A   no

但是我不知道如何在代碼中包含多個列。

非常感謝!

這將做:

answers <- c('A', 'D', 'B', 'C')
mydf$Pass <- ifelse(colSums(t(mydf)==answers, na.rm=T), 'yes', 'no')

mydf
#      Q1   Q2   Q3   Q4 Pass
# 1     A    D    B    B  yes
# 2  <NA> <NA>    B <NA>  yes
# 3     A    D    C    C  yes
# 4  <NA>    C    A    C  yes
# 5  <NA> <NA> <NA>    C  yes
# 6     C <NA>    A    C  yes
# 7     D    A    B    D  yes
# 8     A    A    D    B  yes
# 9     B    A    E <NA>   no
# 10 <NA>    A <NA>    A   no

你可以這樣做:

library(dplyr)

mydf <- mydf %>%
  mutate(Pass = case_when(
    Q1 == "A" | Q2 == "D" | Q3 == "B" | Q4 == "C" ~ "Yes", 
    TRUE ~ "No"
  ))

mydf
     Q1   Q2   Q3   Q4 Pass
1     A    D    B    B  Yes
2  <NA> <NA>    B <NA>  Yes
3     A    D    C    C  Yes
4  <NA>    C    A    C  Yes
5  <NA> <NA> <NA>    C  Yes
6     C <NA>    A    C  Yes
7     D    A    B    D  Yes
8     A    A    D    B  Yes
9     B    A    E <NA>   No
10 <NA>    A <NA>    A   No

如果需要,您可以創建一個答案鍵(向量)。 您可以計算每行的分數,然后轉換為Pass列的向量。

answer_key <- c("A", "D", "B", "C")

mydf$Score <- rowSums(mydf == answer_key[col(mydf)], na.rm = T)
mydf$Pass <- factor(mydf$Score > 0, labels = c("No", "Yes"))
mydf

Output

     Q1   Q2   Q3   Q4 Score Pass
1     A    D    B    B     3  Yes
2  <NA> <NA>    B <NA>     1  Yes
3     A    D    C    C     3  Yes
4  <NA>    C    A    C     1  Yes
5  <NA> <NA> <NA>    C     1  Yes
6     C <NA>    A    C     1  Yes
7     D    A    B    D     1  Yes
8     A    A    D    B     1  Yes
9     B    A    E <NA>     0   No
10 <NA>    A <NA>    A     0   No

暫無
暫無

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

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