Dear list,
I get the ifelse function to work on a data frame but don't know how to do
something similar (only more conditions) with the combination of if and else
like in the example:
A <- c("a","a","b","b","c","c")
B <- c(rep(2,6))
dat <- data.frame(A,B)
dat$C <- if(AB$A=="a") {AB$B^2} else
if(AB$A=="b") {AB$B+5} else
if(AB$A=="c") {AB$B}
So I have a data frame (e.g. "dat") and want to create an new column for
that data frame applying certain conditions depending on the values of the
other columns of the data frame.
In this case I would like R to create a column with the following variables:
4,4,7,7,2,2. So if column A has the value "a" then do value of column B^2,
but if the value is "b" then do B-value + 5, and finally if the value in
column A is "c", then just copy the value of column B.
Hope someone can help... and thanx a lot!
--
View this message in context: http://r.789695.n4.nabble.com/Using-if-and-else-in-a-data-frame-tp4590153p4590153.html
Sent from the R help mailing list archive at Nabble.com.
Using if and else in a data frame
2 messages · pannigh, Rui Barradas
Hello, Your example code has a bug, there's no fata.frame called 'AB'. It's corrected below. pannigh wrote
Dear list,
I get the ifelse function to work on a data frame but don't know how to do
something similar (only more conditions) with the combination of if and
else like in the example:
A <- c("a","a","b","b","c","c")
B <- c(rep(2,6))
dat <- data.frame(A,B)
dat$C <- if(AB$A=="a") {AB$B^2} else
if(AB$A=="b") {AB$B+5} else
if(AB$A=="c") {AB$B}
So I have a data frame (e.g. "dat") and want to create an new column for
that data frame applying certain conditions depending on the values of the
other columns of the data frame.
In this case I would like R to create a column with the following
variables: 4,4,7,7,2,2. So if column A has the value "a" then do value of
column B^2, but if the value is "b" then do B-value + 5, and finally if
the value in column A is "c", then just copy the value of column B.
Hope someone can help... and thanx a lot!
Now, let's run it.
A <- c("a","a","b","b","c","c")
B <- c(rep(2,6))
dat <- data.frame(A,B)
dat$C <- if(dat$A=="a"){dat$B^2} else
if(dat$A=="b") {dat$B+5} else
if(dat$A=="c") {dat$B}
Warning message:
In if (dat$A == "a") { :
the condition has length > 1 and only the first element will be used
'ifelse' is vectorized, 'if / else' is not. The condition does have length >
1:
dat$A=="a"
[1] TRUE TRUE FALSE FALSE FALSE FALSE
Length 6, only the first, TRUE, is used and dat$C <- dat$B^2.
The solution is to use 'ifelse'.
dat <- data.frame(A,B)
dat$C <- ifelse(dat$A == "a", dat$B^2,
ifelse(dat$A == "b", dat$B + 5, dat$B))
Hope this helps.
Rui Barradas
--
View this message in context: http://r.789695.n4.nabble.com/Using-if-and-else-in-a-data-frame-tp4590153p4590279.html
Sent from the R help mailing list archive at Nabble.com.