R программирование — разделение столбца на основе значений столбца

#r #data-science #data-processing

#r #наука о данных #обработка данных

Вопрос:

У меня есть набор данных, формат которого показан ниже:

 a1    a2    a3 |   class
0     0     0  |   c1
0     0     1  |   c2
0     1     1  |   c3
 

Я хочу разделить столбец «класс» на основе значений столбца. Я хочу, чтобы результат выглядел так:

 a1    a2    a3 |   c1    c2    c3
0     0     0  |   1     0     0
0     0     1  |   0     1     0
0     1     1  |   0     0     1
 

Здесь, поскольку «класс» содержит 3 значения, я хочу удалить класс столбца и добавить 3 столбца, по одному для каждого значения. Поскольку в первой строке был class = c1, в выходном фрейме данных для первой строки я хочу, чтобы c1 = 1 и c2, c3 = 0.

Каков наилучший способ сделать это?

Мой текущий код показан ниже:

 #read data
df = df = read.table('source')
names(df) = c("a1", "a2", "a3", "class")

#get new columns to be added
c_data = df['class']
c_types = unique(c_data)
 

Я не слишком уверен, как действовать дальше.

Одно из решений, о котором я подумал, заключается в том, что я мог бы создать 3 массива (поскольку я знаю количество уникальных элементов = 3) для каждого значения c_type и присвоить значения, проверив, есть ли c_data == c_type, и добавить массивы в виде столбцов в dataframe, но должен быть лучший способ сделать это, поскольку этобыло бы очень сложно сделать, если «класс» имеет большое количество значений.

Комментарии:

1. cbind(df[-4], as.data.frame.matrix(table(rownames(df), df$class))) или library(tidyverse) ; df %>% mutate(i = 1) %>% spread(class, i, fill = 0)