Consider the iris
data:
iris Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa 7 4.6 3.4 1.4 0.3 setosa
I want to create a new column based on a comparison of the values in variable Sepal.Length
with a fixed limit / cut-off, e.g. check if the values are larger or smaller than 5:
if Sepal.Length >= 5 assign "UP" else assign "DOWN"
to a new column "Regulation".
What's the way to do that?
To add a new column to a dataframe in R you can use the $-operator. For example, to add the column “NewColumn”, you can do like this: dataf$NewColumn <- Values . Now, this will effectively add your new variable to your dataset.
Try
iris$Regulation <- ifelse(iris$Sepal.Length >=5, "UP", "DOWN")
In the interest of updating a possible canonical, the package dplyr
has the function mutate
which lets you create a new column in a data.frame in a vectorized fashion:
library(dplyr) iris_new <- iris %>% mutate(Regulation = if_else(Sepal.Length >= 5, 'UP', 'DOWN'))
This makes a new column called Regulation
which consists of either 'UP'
or 'DOWN'
based on applying the condition to the Sepal.Length
column.
The case_when
function (also from dplyr
) provides an easy to read way to chain together multiple conditions:
iris %>% mutate(Regulation = case_when(Sepal.Length >= 5 ~ 'High', Sepal.Length >= 4.5 ~ 'Mid', TRUE ~ 'Low'))
This works just like if_else
except instead of 1 condition with a return value for TRUE and FALSE, each line has condition (left side of ~
) and a return value (right side of ~
) that it returns if TRUE. If false, it moves on to the next condition.
In this case, rows where Sepal.Length >= 5
will return 'High'
, rows where Sepal.Length < 5
(since the first condition had to fail) & Sepal.Length >= 4.5
will return 'Mid'
, and all other rows will return 'Low'
. Since TRUE
is always TRUE
, it is used to provide a default value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With