case_when
в dplyr
пакете - хороший выбор для нескольких ifelse:
library(tidyverse) ; library(stringr)
df %>% mutate(New = case_when(Individuals == 1 ~ str_c(Household_ID, "", sep = ""),
Individuals == 2 ~ str_c(Household_ID, "B", sep = ""),
Individuals == 3 ~ str_c(Household_ID, "C", sep = "")))
И вот результат, который я получаю:
Household_ID Individuals New
1 173 1 173
2 174 1 174
3 174 2 174B
4 175 1 175
5 175 2 175B
6 175 3 175C
PS: Для данных часть, если вам нужно.
library(data.table)
df = fread("Household_ID Individuals
173 1
174 1
174 2
175 1
175 2
175 3")
Но если в Individuals
много уникальных значений, вы можете попробовать создать новый столбец с алфавитным соответствием для каждого значения отдельных лиц, а затем создать еще один столбец, чтобы объединить Household ID
, наконец, опустите столбец алфавита.
df %>%
mutate(Letter = LETTERS[Individuals]) %>%
mutate(New = ifelse(Individuals != 1,
str_c(Household_ID, Letter, sep = ""),
Household_ID)) %>%
select(-Letter)
Надеюсь, эта помощь!