#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)