Reputation: 23
my_df <- df %>%
mutate(incExpChange= case_when(
(incNextYear == 'Higher' & INEXQ2 %in% 0:95) ~ INEXQ2,
(incNextYear == 'Lower' & INEXQ2 %in% 0:95) ~ -INEXQ2))
I have two columns 'incNextYear' & 'INEXQ2', I want to convert some positive values in 'INEXQ2' to negative in my new column when incNextYear is 'Lower'. -INEXQ2 is not working for me. What am I doing wrong?
structure(list(rID = 1:6, region = structure(c(1L, 2L, 3L, 4L, 1L, 4L), .Label = c("West", "Northeast", "South", "Midwest"), class = "factor"), incNextYear = structure(c(1L, 1L, 1L, 2L, 1L, 2L), .Label = c("Higher", "Lower", "About the same", "DK"), class = "factor"), homeBuying = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("BAD", "GOOD", "PRO-CON"), class = "factor"), REGION = c("West", "Northeast", "South", "Midwest", "West", "Midwest"), INEXQ1 = c("Higher", "Higher", "Higher", "Lower", "Higher", "Lower"), INEXQ2 = c("2", "3", "13", "3", "6", "5"), V204 = c("BAD", "BAD", "BAD", "BAD", "BAD", "BAD")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))
Upvotes: 2
Views: 218
Reputation: 78927
We could use type.convert(as.is = TRUE)
library(dplyr)
df %>%
type.convert(as.is = TRUE) %>%
mutate(incExpChange= case_when(
(incNextYear == 'Higher' & INEXQ2 %in% 0:95) ~ INEXQ2,
(incNextYear == 'Lower' & INEXQ2 %in% 0:95) ~ -INEXQ2))
rID region incNextYear homeBuying REGION INEXQ1 INEXQ2 V204 incExpChange
<int> <chr> <chr> <chr> <chr> <chr> <int> <chr> <int>
1 1 West Higher BAD West Higher 2 BAD 2
2 2 Northeast Higher BAD Northeast Higher 3 BAD 3
3 3 South Higher BAD South Higher 13 BAD 13
4 4 Midwest Lower BAD Midwest Lower 3 BAD -3
5 5 West Higher BAD West Higher 6 BAD 6
6 6 Midwest Lower BAD Midwest Lower 5 BAD -5
Upvotes: 3
Reputation: 13559
Replace
-INEXQ2
with
INEXQ2*(-1)
Replace
(incNextYear == 'Higher' & INEXQ2 %in% 0:95)
with
((incNextYear == 'Higher') && (INEXQ2 %in% 0:95))
another expression is also changed like above.
Upvotes: 0