#r
Вопрос:
Вот пример кода:
Group <- c("A", "A", "A", "A", "A", "B", "B", "B","B", "B")
Actor <- c(1, 3, 6, 4, 1, 2, 2, 6, 4, 3)
df <- data.frame(Group,Actor)
df
Теперь я хочу создать три новых столбца (Пол, статус, Статистика секса) на основе данных в столбцах «Группа» и «Актер».
Например, если Группа = A и Актер = 1, то Пол = M, Статус = Dom и SexStat = DomM. Если Группа = A и Актер = 3, то Пол = F, Статус = Med и SexStat = MedF (и так далее).
Цифры не всегда совпадают с одним и тем же рангом/полом в каждой группе, и с 5500 строками данных я был бы рад, если бы был способ не делать это вручную! Любая помощь была бы очень признательна.
Ответ №1:
Вы можете создать условия для секса и статуса, а затем вставить их для создания статистики секса
library(dplyr)
Group <- c("A", "A", "A", "A", "A", "B", "B", "B","B", "B")
Actor <- c(1, 3, 6, 4, 1, 2, 2, 6, 4, 3)
df <- data.frame(Group,Actor)
df
df %>%
mutate(
Sex = case_when(
Group == "A" amp; Actor == 1 ~ "M",
Group == "A" amp; Actor == 3 ~ "F",
TRUE ~ ""
),
Status = case_when(
Group == "A" amp; Actor == 1 ~ "Dom",
Group == "A" amp; Actor == 3 ~ "Med",
TRUE ~ ""
),
SexStat = paste0(Status,Sex)
)
Group Actor Sex Status SexStat
1 A 1 M Dom DomM
2 A 3 F Med MedF
3 A 6
4 A 4
5 A 1 M Dom DomM
6 B 2
7 B 2
8 B 6
9 B 4
10 B 3
Ответ №2:
Мы можем сделать это с набором данных ключ/значение, присоединившись
library(dplyr)
library(tidyr)
library(stringr)
keydat <- tibble(Group = "A", Actor = c(1, 3), Sex = c("M", "F"), Status = c("Dom", "Med"))
df %>%
left_join(keydat) %>%
mutate(across(c(Sex, Status), replace_na, ""),
SexStat = str_c(Status, Sex))
-выход
Group Actor Sex Status SexStat
1 A 1 M Dom DomM
2 A 3 F Med MedF
3 A 6
4 A 4
5 A 1 M Dom DomM
6 B 2
7 B 2
8 B 6
9 B 4
10 B 3