Мне было интересно, есть ли способ создать несколько столбцов из списка в R, используя функцию mutate()
в пределах для для l oop.
Вот пример того, что я имею в виду:
Проблема:
У меня есть фрейм данных df
, который имеет 2 столбца: категорию и рейтинг. Я хочу добавить столбец для каждого элемента df$category
, и в этом столбце я хочу 1, если столбец категории соответствует итератору.
library(dplyr)
df <- tibble(
category = c("Art","Technology","Finance"),
rating = c(100,95,50)
)
Делая это вручную, я мог бы сделать:
df <-
df %>%
mutate(art = ifelse(category == "Art", 1,0))
Однако, что происходит, когда у меня 50 категорий? (Что близко к тому, что у меня есть в моей первоначальной проблеме. Это заняло бы много времени!)
То, что я пытался:
category_names <- df$category
for(name in category_names){
df <-
df %>%
mutate(name = ifelse(category == name, 1,0))
}
К сожалению, это не похоже на работу.
Буду признателен за любую информацию по этому вопросу!
Полный код:
library(dplyr)
#Creates tibble
df <- tibble(
category = c("Art","Technology","Finance"),
rating = c(100,95,50)
)
#Showcases the operation I would like to loop over df
df <-
df %>%
mutate(art = ifelse(category == "Art", 1,0))
#Creates a variable for clarity
category_names <- df$category
#For loop I tried
for(name in category_names){
df <-
df %>%
mutate(name = ifelse(category == name, 1,0))
}
Я осознаю, что то, что я по сути делаю, является формой model.matrix()
; однако, прежде чем я узнал об этой функции, я все еще был озадачен, почему то, что я делал раньше, не работало.