Я хотел бы создать новую переменную / переменные (в зависимости от того, в широком или длинном формате данные) на основе операторов if / else if / else. Я знаком с использованием mutate, но не могу заставить его работать с несколькими переменными. Я вижу, что было много похожих сообщений по этому поводу, и я пробовал предлагаемые решения, но безуспешно.
Вот образец данных в широком формате:
structure(list(distribution = structure(c(1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("bimodal",
"extreme_left", "extreme_right", "left_skew", "right_skew", "trunc_norm_left",
"trunc_norm_right", "trunc_uni_left", "trunc_uni_right", "uniform"
), class = "factor"), Rating_1 = c(25L, 15L, 15L, 5L, 5L, 4L,
4L, 18L, 5L, 9L, 25L, 7L, 2L, 1L, 5L, 12L, 5L, 13L, 7L, 11L),
Rating_2 = c(0L, 8L, 6L, 4L, 5L, 11L, 8L, 7L, 12L, 6L, 0L,
11L, 10L, 1L, 11L, 10L, 10L, 8L, 10L, 5L), Rating_3 = c(0L,
4L, 9L, 9L, 13L, 20L, 10L, 0L, 16L, 8L, 0L, 14L, 26L, 5L,
16L, 6L, 20L, 8L, 13L, 9L), Rating_4 = c(0L, 8L, 6L, 19L,
19L, 11L, 13L, 7L, 12L, 12L, 0L, 11L, 10L, 9L, 13L, 10L,
10L, 8L, 12L, 9L), Rating_5 = c(25L, 15L, 14L, 13L, 8L, 4L,
15L, 18L, 5L, 15L, 25L, 7L, 2L, 34L, 5L, 12L, 5L, 13L, 8L,
16L)), row.names = c(NA, 20L), class = "data.frame")
Это это одна из стратегий, которые я пробовал:
df %>%
arrange(distribution) %>%
if (distribution == "bimodal") {
mutate(Dist1 = Rating_1 * 20 - 5,
Dist2 = Rating_2 * 20 - 0,
Dist3 = Rating_3 * 20 - 0,
Dist4 = Rating_4 * 20 - 0,
Dist5 = Rating_5 * 20 - 0)
} else if (distribution == "extreme_left") {
mutate(Dist1 = Rating_1 * 20 - 0,
Dist2 = Rating_2 * 20 - 0,
Dist3 = Rating_3 * 20 - 1,
Dist4 = Rating_4 * 20 - 2,
Dist5 = Rating_5 * 20 - 6)
} else if (distribution == "extreme_right") {
mutate (Dist1 = Rating_1 * 20 - 6,
Dist2 = Rating_2 * 20 - 3,
Dist3 = Rating_3 * 20 - 1,
Dist4 = Rating_4 * 20 - 0,
Dist5 = Rating_5 * 20 - 0)
} else if (distribution == "left_skew") {
mutate (Dist1 = Rating_1 * 20 - 1,
Dist2 = Rating_2 * 20 - 1,
Dist3 = Rating_3 * 20 - 2,
Dist4 = Rating_4 * 20 - 2,
Dist5 = Rating_5 * 20 - 4)
} else if (distribution == "right_skew") {
mutate (Dist1 = Rating_1 * 20 - 4,
Dist2 = Rating_2 * 20 - 2,
Dist3 = Rating_3 * 20 - 2,
Dist4 = Rating_4 * 20 - 1,
Dist5 = Rating_5 * 20 - 1)
} else if (distribution == "trunc_norm_left") {
mutate (Dist1 = Rating_1 * 20 - 0,
Dist2 = Rating_2 * 20 - 0,
Dist3 = Rating_3 * 20 - 6,
Dist4 = Rating_4 * 20 - 3,
Dist5 = Rating_5 * 20 - 1)
} else if (distribution == "trunc_norm_right") {
mutate (Dist1 = Rating_1 * 20 - 1,
Dist2 = Rating_2 * 20 - 3,
Dist3 = Rating_3 * 20 - 6,
Dist4 = Rating_4 * 20 - 0,
Dist5 = Rating_5 * 20 - 0)
} else if (distribution == "trunc_uni_left") {
mutate (Dist1 = Rating_1 * 20 - 0,
Dist2 = Rating_2 * 20 - 0,
Dist3 = Rating_3 * 20 - 4,
Dist4 = Rating_4 * 20 - 3,
Dist5 = Rating_5 * 20 - 3)
} else if (distribution "trunc_uni_right") {
mutate(Dist1 = Rating_1 * 20 - 3,
Dist2 = Rating_2 * 20 - 3,
Dist3 = Rating_3 * 20 - 4,
Dist4 = Rating_4 * 20 - 0,
Dist5 = Rating_5 * 20 - 0)
} else {
mutate (Dist1 = Rating_1 * 20 - 2,
Dist2 = Rating_2 * 20 - 2,
Dist3 = Rating_3 * 20 - 2,
Dist4 = Rating_4 * 20 - 2,
Dist5 = Rating_5 * 20 - 2)
}
Я пробовал это как с данными длинного, так и с широкоформатными данными, хотя я понимаю, что для данных длинного формата чего-то не хватает.
I ' Я ищу что-то подобное, если данные в широком формате.
structure(list(distribution = structure(c(1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("bimodal",
"extreme_left", "extreme_right", "left_skew", "right_skew", "trunc_norm_left",
"trunc_norm_right", "trunc_uni_left", "trunc_uni_right", "uniform"
), class = "factor"), Rating_1 = c(25L, 15L, 15L, 5L, 5L, 4L,
4L, 18L, 5L, 9L, 25L, 7L, 2L, 1L, 5L, 12L, 5L, 13L, 7L, 11L),
Rating_2 = c(0L, 8L, 6L, 4L, 5L, 11L, 8L, 7L, 12L, 6L, 0L,
11L, 10L, 1L, 11L, 10L, 10L, 8L, 10L, 5L), Rating_3 = c(0L,
4L, 9L, 9L, 13L, 20L, 10L, 0L, 16L, 8L, 0L, 14L, 26L, 5L,
16L, 6L, 20L, 8L, 13L, 9L), Rating_4 = c(0L, 8L, 6L, 19L,
19L, 11L, 13L, 7L, 12L, 12L, 0L, 11L, 10L, 9L, 13L, 10L,
10L, 8L, 12L, 9L), Rating_5 = c(25L, 15L, 14L, 13L, 8L, 4L,
15L, 18L, 5L, 15L, 25L, 7L, 2L, 34L, 5L, 12L, 5L, 13L, 8L,
16L), Dist1 = c(495, 295, 295, 95, 95, 75, 75, 355, 95, 175,
495, 135, 35, 15, 95, 235, 95, 255, 135, 215), Dist2 = c(0,
160, 120, 80, 100, 220, 160, 140, 240, 120, 0, 220, 200,
20, 220, 200, 200, 160, 200, 100), Dist3 = c(0, 80, 180,
180, 260, 400, 200, 0, 320, 160, 0, 280, 520, 100, 320, 120,
400, 160, 260, 180), Dist4 = c(0, 160, 120, 380, 380, 220,
260, 140, 240, 240, 0, 220, 200, 180, 260, 200, 200, 160,
240, 180), Dist5 = c(495, 295, 275, 255, 155, 75, 295, 355,
95, 295, 495, 135, 35, 675, 95, 235, 95, 255, 155, 315)), row.names = c(NA,
20L), class = "data.frame")
Любая помощь будет принята с благодарностью.