Разбор перегруженного столбца в фрейме данных - создание нескольких столбцов с помощью одного оператора mutate
У меня перегружен столбец, overloaded
в кадре данных, содержащем такие значения, как 143
или же 23
или же 12789
,
df <- data_frame(id = 1:3,
overloaded = c("145", "459", "2"))
Я хочу разобрать этот столбец в 9 новых логических столбцов.
df %>%
mutate(col_1 = str_detect(overloaded, "1"),
col_2 = str_detect(overloaded, "2"),
col_3 = str_detect(overloaded, "3"),
col_4 = str_detect(overloaded, "4"),
col_5 = str_detect(overloaded, "5"),
col_6 = str_detect(overloaded, "6"),
col_7 = str_detect(overloaded, "7"),
col_8 = str_detect(overloaded, "8"),
col_9 = str_detect(overloaded, "9"))
вот так
id overloaded col_1 col_2 col_3 col_4 col_5 col_6 col_7 col_8 col_9
1 145 TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
2 459 FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
3 2 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Как я могу написать это, не повторяя себя?
1 ответ
Решение
pat = as.character(1:9)
res = sapply(pat, FUN = str_detect, string = df$overloaded)
colnames(res) = paste("col", pat, sep = "_")
cbind(df, res)
# id overloaded col_1 col_2 col_3 col_4 col_5 col_6 col_7 col_8 col_9
# 145 1 145 TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
# 459 2 459 FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
# 2 3 2 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE