Назначьте значение новому столбцу на основе значений в 2 других столбцах

#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