使用for和if基于数据框中的其他列添加列值

use*_*755 15 for-loop if-statement r

我有这样的数据帧:

     id        adit     diag1   diag2       
      2       3         4230    2234        
      3       5         3345    4456        
      4       6         4567    4467
Run Code Online (Sandbox Code Playgroud)

我想添加其他2列,dse1dse2使用下面的伪代码:

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

if diag2 contains 4567 then dse2 =1  else dse2 = 0
Run Code Online (Sandbox Code Playgroud)

我用过这个:

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} 
  }
}
Run Code Online (Sandbox Code Playgroud)

但这些都行不通.

Pau*_*tra 24

ifelse例如,不需要使用循环,只需使用

dse = within(dse, {
    dse1 = ifelse(diag1 == 4230, 1, 0)
    dse2 = ifelse(diag2 == 4567, 1, 0)
 })
Run Code Online (Sandbox Code Playgroud)

  • 我得到了downvote,只是添加了一些示例代码. (4认同)
  • @user1582755 - 要调整多个匹配项的代码,我认为您只需替换上面的相应行,例如:`dse1 = ifelse(diag1 %in% c(2345,3456,5678), 1, 0)` (2认同)

Tyl*_*ker 13

不要使用if/else.去矢量化,如:

dat$dse1 <- as.numeric(dat$diag1 == 4230)
dat$dse2 <- as.numeric(dat$diag2 == 4567)
Run Code Online (Sandbox Code Playgroud)


The*_*ras 5

像这样:

dse$dse1<-0
dse$dse2<-0
dse$dse1[dse$diag1==4230]<-1
dse$dse2[dse$diag2==4567]<-1
Run Code Online (Sandbox Code Playgroud)

请给自己一个好的R教程(比如这个)并阅读所有关于索引向量的内容.