Как считать с несколькими условиями в R - PullRequest
1 голос
/ 06 апреля 2020

У меня есть нижеупомянутый фрейм данных в R:

Id     rule1   rule2
o1     1       0
o2     1       1
o3     1       0
o4     0       1

Я хочу добавить еще один столбец как rule3, где, если rule1 и rule2 равны 1, тогда это должно быть b, если rule1 равно 0 и rule2 равно 1, это должно быть a, а если rule 1 равно 1, а rule2 равно 0, то оно должно быть c.

Id     rule1   rule2   rule3
o1     0       1       a
o2     0       1       a
o3     1       1       b
o4     1       0       c

Я использую следующий код, но он не работает.

df1$rule3 <- ifelse(df1$rule1=1 && df1$rule2=1, "c", 0)

А как считать базис a, b и c.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

В базе R, используя вложенный оператор ifelse, вы можете сделать:

transform(df, rule3 = ifelse(rule1 == 1 & rule2 == 1, 'b', 
                         ifelse(rule1 == 0 & rule2 == 1, 'a', 
                                ifelse(rule1 == 1 & rule2 == 0, 'c', NA))))

#  Id rule1 rule2 rule3
#1 o1     0     1     a
#2 o2     0     1     a
#3 o3     1     1     b
#4 o4     1     0     c

data

df <- structure(list(Id = structure(1:4, .Label = c("o1", "o2", "o3", 
"o4"), class = "factor"), rule1 = c(0L, 0L, 1L, 1L), rule2 = c(1L, 
1L, 1L, 0L)), row.names = c(NA, -4L), class = "data.frame")
0 голосов
/ 06 апреля 2020

Я бы использовал dplyr mutate с case_when:

library(dplyr)

df <- tibble(
  rule1 = c(0, 0, 1, 1),
  rule2 = c(1, 1, 1, 0)
)

mutate(df, rule3 = case_when(
  rule1 == 0 & rule2 == 1 ~ "a",
  (rule1 & rule2) == 1 ~ "b",
  rule1 == 1 & rule2 == 0 ~ "c",
  TRUE ~ NA_character_
))

# A tibble: 4 x 3
  rule1 rule2 rule3
  <dbl> <dbl> <chr>
1     0     1 a    
2     0     1 a    
3     1     1 b    
4     1     0 c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...