I want to check every row in data frame. I need to check all columns in that row to see if it contains a 1, if it does I want to populate another column that summarizes if any
Using:
dat$imputed <- c('no','yes')[1 + (rowSums(dat == 1) > 0)]
gives:
> dat A B C imputed 1 0 0 0 no 2 0 1 1 yes 3 1 0 0 yes 4 0 0 0 no
What this does:
rowSums(dat == 1) > 0
creates a logical vector indicating whether a row contains a 1
1
to that gives an integer vectoryes
and no
values.Used data:
dat <- structure(list(A = c(0L, 0L, 1L, 0L), B = c(0L, 1L, 0L, 0L), C = c(0L, 1L, 0L, 0L)),
.Names = c("A", "B", "C"), class = "data.frame", row.names = c(NA, -4L))
A dplyr
way would be
a1 %>% mutate(imputed_data = ifelse(rowSums(. == 1) != 0, "yes", "no"))
One of many solutions:
a1 = data.frame(A = c(0,0,1,0), B = c(0,1,0,0), C = c(0,1,0,0))
a1$imputed = apply(a1, 1, function(x) ifelse(any(x == 1), 'yes', 'no'))
A B C imputed
1 0 0 0 no
2 0 1 1 yes
3 1 0 0 yes
4 0 0 0 no