Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

add column values based on other columns in data frame using for and if

I have a dataframe like this:

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

I would like to add other 2 columns, dse1 and dse2 using the pseudo-code below:

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

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

I used this:

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} 
  }
}

But these do not work.

like image 423
user1582755 Avatar asked Jan 07 '13 18:01

user1582755


People also ask

How do you add a new column to a DataFrame based on another column?

Using apply() method If you need to apply a method over an existing column in order to compute some values that will eventually be added as a new column in the existing DataFrame, then pandas. DataFrame. apply() method should do the trick.

How do I get the value of a column in a DataFrame based on another column?

You can extract a column of pandas DataFrame based on another value by using the DataFrame. query() method. The query() is used to query the columns of a DataFrame with a boolean expression.

How do I add a column based on a condition?

Select Add Column > Custom Column. Enter "Bonus" in the New column name text box.


2 Answers

No need to use a loop, just use ifelse, for example

dse = within(dse, {
    dse1 = ifelse(diag1 == 4230, 1, 0)
    dse2 = ifelse(diag2 == 4567, 1, 0)
 })
like image 113
Paul Hiemstra Avatar answered Oct 21 '22 09:10

Paul Hiemstra


Don't use the if/else. Go vectorized as in:

dat$dse1 <- as.numeric(dat$diag1 == 4230)
dat$dse2 <- as.numeric(dat$diag2 == 4567)
like image 27
Tyler Rinker Avatar answered Oct 21 '22 09:10

Tyler Rinker