Приведение уникальных объектов в столбце к именам переменных и фиктивное кодирование исходных объектов в переменные в R
Возникли проблемы с тем, как создать фиктивный код следующего набора данных.
Пример данных, скажем dataframe = mydata:
ID | NAMES |
-- | -------------- |
1 | 4444, 333, 456 |
2 | 333 |
3 | 456, 765 |
Я хотел бы привести только уникальные переменные в именах в качестве переменных столбца и кода, если каждая строка имеет эту переменную или нет, то есть 1 или 0
Желаемый Результат:
ID | NAMES | 4444 | 333 | 456 | 765 |
-- | -------------- |------|-----|-----|-----|
1 | 4444, 333, 456 | 1 | 1 | 1 | 0 |
2 | 333 | 0 | 1 | 0 | 0 |
3 | 456, 765 | 0 | 0 | 1 | 1 |
То, что я сделал до сих пор, - это создал вектор уникальных
split <- str_split(string = mydata$NAMES,pattern = ",")
vec <- unique(str_trim(unlist(split)))
remove <- ""
vec <- as.data.frame(vec[! vec %in% remove])
colnames(vec) <- "var"
vecRef <- as.vector(vec$var)
namesCast <- dcast(data = vec,formula = .~var)
namesCast <- nameCast[,2:ncol(namesCast)]
Это дает вектор уникальных имен с удаленными пробелами / нерегулярностями. Оттуда я понятия не имею, как это сделать. совпадение / фиктивное кодирование, так что любая помощь будет очень признательна!1 ответ:
Вы можете использовать
cSplit_e
из моего пакета splitstackshape, например:Если вы хотите увидеть основную функцию, которая вызывается при использовании этих аргументов, вы можете посмотреть наlibrary(splitstackshape) cSplit_e(mydata, "NAMES", sep = ",", type = "character", fill = 0) # ID NAMES NAMES_333 NAMES_4444 NAMES_456 NAMES_765 # 1 1 4444, 333, 456 1 1 1 0 # 2 2 333 1 0 0 0 # 3 3 456, 765 0 0 1 1
splitstackshape:::charMat
, которая беретlist
, сгенерированнуюstrsplit
, и создает из нееmatrix
.Вызов функции напрямую даст вам что-то вроде этого:
splitstackshape:::charMat( lapply(strsplit(as.character(mydata$NAMES), ","), function(x) gsub("^\\s+|\\s$", "", x))) # 333 4444 456 765 # [1,] 1 1 1 NA # [2,] 1 NA NA NA # [3,] NA NA 1 1