A - Create control column from two other columns

Asked

Viewed 60 times

4

Expensive,

I have a very large database with the following feature:

ORIENTAÇÃO   VOTO

Sim          Sim
Não          Sim
Sim          Não
Não          Não

I would like to create a third column in which if the values hit, 1 will appear. If not hit, 0. Example:

ORIENTAÇÃO   VOTO     CHECK

Sim          Sim        1
Não          Sim        0
Sim          Não        0
Não          Não        1

Can you help me? Thank you very much in advance!

1 answer

4


I’ll do it in two lines of code.
Just see that the logical values FALSE/TRUE are coded internally by R as integers 0/1, respectively. Then, it is first seen that the values of the two columns are equal and then become integers.

It is still necessary to see if the columns are class "character" or "factor". The functions read.table and derivatives assume the argument

stringsAsFactors = TRUE

and therefore, to avoid surprises, the columns are compared as "character". Another solution will be to read the data with the above argument with the value FALSE.

dados$CHECK <- as.character(dados$ORIENTAÇÃO) == as.character(dados$VOTO)
dados$CHECK <- as.integer(dados$CHECK)

dados
#  ORIENTAÇÃO      VOTO CHECK
#1        Sim       Sim     1
#2        Não       Sim     0
#3        Sim       Não     0
#4        Não       Não     1
#5        Sim Abstenção     0

Another option is to use the package dplyr, very popular to transform data.

library(dplyr)

dados %>% 
  mutate(ORIENTAÇÃO = as.character(ORIENTAÇÃO),
         VOTO = as.character(VOTO),
         CHECK = as.integer(ORIENTAÇÃO == VOTO))

The result is the same.

Editing.

Yet another solution.

dados$CHECK <- as.integer(Map(`==`, dados[[1]], dados[[2]]))

Dice.

I added a data line to not have the same levels of "factor" in both columns, if the base is read as the default value of stringsAsFactors. This is the first case below.

first case: Read as "factor".

dados <- read.table(text = "
ORIENTAÇÃO   VOTO
Sim          Sim
Não          Sim
Sim          Não
Não          Não
Sim          Abstenção
", header = TRUE)

second case: Read as "character".

dados <- read.table(text = "
ORIENTAÇÃO   VOTO
Sim          Sim
Não          Sim
Sim          Não
Não          Não
Sim          Abstenção
", header = TRUE, stringsAsFactors = FALSE)
  • Perfect, Rui. Thank you very much. It worked well! Strong hug!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.