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!
– Guilherme Marques