in my dataset in the column "new" I would like to do the following: if the percentage is bigger than 100% I would like to subtract that percentage from 200%, e.g. if the value is 120% I want the new value in the row to be 200%-120% which would be 80%. How can I achieve that? Thank you!
jointdataset1 <- structure(list(group = c("Interests", "Interests", "Interests",
"Interests", "Interests", "Interests", "Interests", "Interests",
"Interests", "Interests", "Interests", "Interests"), mean_name = c("Administrating processes",
"Analytical", "Art and Culture", "Commercial activities", "Creative",
"Helping/supporting", "Leading", "Networking", "Physical", "Practical",
"Technical", "Transforming Processes"), means.x = c(4, 4, 1,
4, 3, 3, 3, 3, 3, 6, 6, 1), means.y = c(4, 5.5, 1, 5, 3, 4, 4.5,
3.5, 2.5, 5.5, 6.5, 3), new = c("100.0%", "72.7%", "100.0%",
"80.0%", "100.0%", "75.0%", "66.7%", "85.7%", "120.0%", "109.1%",
"92.3%", "33.3%")), class = "data.frame", row.names = c(NA, -12L
))
CodePudding user response:
If you want the "new" column to still have the % sign, you can do the following:
library(dplyr)
jointdataset1 %>%
mutate(value = as.numeric(sub("\\%.*", "", new)),
new_value = ifelse(value > 100, 200 - value, value),
new = paste0(new_value,'%')) %>%
dplyr::select(c(-value, -new_value))
Output:
group mean_name means.x means.y new
1 Interests Administrating processes 4 4.0 100%
2 Interests Analytical 4 5.5 72.7%
3 Interests Art and Culture 1 1.0 100%
4 Interests Commercial activities 4 5.0 80%
5 Interests Creative 3 3.0 100%
6 Interests Helping/supporting 3 4.0 75%
7 Interests Leading 3 4.5 66.7%
8 Interests Networking 3 3.5 85.7%
9 Interests Physical 3 2.5 80%
10 Interests Practical 6 5.5 90.9%
11 Interests Technical 6 6.5 92.3%
12 Interests Transforming Processes 1 3.0 33.3%
CodePudding user response:
This should work.
library(dplyr)
jointdataset1 %>%
select(!new) %>%
mutate(new = round(means.x/means.y*100, 1)) %>%
mutate(new = case_when(new > 100 ~ 200-new,
new <= 100 ~ new))