Добавьте значения столбца на основе других столбцов в кадре данных, используя для и, если

У меня есть dataframe, как это:

     id        adit     diag1   diag2       
      2       3         4230    2234        
      3       5         3345    4456        
      4       6         4567    4467

Я хотел бы добавить другие 2 столбца, dse1 и dse2, используя псевдокод ниже:

if diag1 contains 4230 then dse1 = 1 else dse1 = 0

if diag2 contains 4567 then dse2 =1  else dse2 = 0

Я использовал это:

for (i in 1 : nrow(dse)){
  for (j in 3: ncol(dse)){
     if dse[i,j] %in% ("4320"){dse$dse1 = 1}
        else{dse$dse1 = 0}
    if dse[i,j] %in% ("4567"){dse$dse2 = 1}
        else{dse$dse2 = 0} 
  }
}

Но это не работает.

Ответ 1

Не нужно использовать цикл, просто используйте ifelse, например

dse = within(dse, {
    dse1 = ifelse(diag1 == 4230, 1, 0)
    dse2 = ifelse(diag2 == 4567, 1, 0)
 })

Ответ 2

Не используйте if/else. Идите в векторе, как в:

dat$dse1 <- as.numeric(dat$diag1 == 4230)
dat$dse2 <- as.numeric(dat$diag2 == 4567)

Ответ 3

Вы можете использовать transform:

transform(dse, dse1 = as.numeric(diag1 == 4230),
               dse2 = as.numeric(diag2 == 4567))

Ответ 4

Вот так:

dse$dse1<-0
dse$dse2<-0
dse$dse1[dse$diag1==4230]<-1
dse$dse2[dse$diag2==4567]<-1

Пожалуйста, возьмите себе хороший учебник R (например, this) и прочитайте все об индексах.