Если вы знакомы с dplyr
, вы можете сделать это с помощью mutate.
instru = c("Accordian", "Clarinet", "Trumpet", "DoubleBass", "Oboe", "Piano", "Saxophone", "Violin", "Cello", "Tuba", "Viola",
"Bassoon", "EnglishHorn", "French horn", "Flute", "Piccolo", "SynthBass", "Trombone")
mix1_instruments = c("Accordion", "Trumpet", "Violin", "Cello", "Triangle")
mix2_instruments = c("Bassoon", "Saxophone", "Flute", "French horn", "Washboard")
train = data.frame(mix1_instruments, mix2_instruments)
train <- train %>%
mutate(instruments = (mix1_instruments %in% instru) | (mix2_instruments %in% instru))
Выходы TRUE
или FALSE
, но они также могут быть преобразованы в 0 или 1.
train$instruments <- as.numeric(train$instruments)
Редактировать: только что увидел, что меня вычерпали, когда я писал свой ответ (гораздо лучше!), Но есть проблема с масштабируемостью.
Далее будут вставлены новые столбцы с именем <old_column_name>_instruments
с логическими значениями, если каждая запись в этом столбце находится в инструкции, а затем объединить их в один столбец, содержащий логическое значение для любого значения в any . столбец содержал запись в инструкции:
instru = c("Accordian", "Clarinet", "Trumpet", "DoubleBass", "Oboe", "Piano", "Saxophone", "Violin", "Cello", "Tuba", "Viola",
"Bassoon", "EnglishHorn", "French horn", "Flute", "Piccolo", "SynthBass", "Trombone")
mix1_instruments = c("Clarinet", "Flute", "Clarinet", "English Horn", "Washboard", "Saxophone", "Washboard")
mix2_instruments = c("French Horn", "French Horn", "French Horn", "Flute", "Flute", "Triangle", "Triangle")
train = data.frame(mix1_instruments, mix2_instruments)
train %<>%
mutate_all(funs(instruments = . %in% instru)) %>%
unite(col = instruments,
ends_with('_instruments_instruments'), # optional, iterates only over columns added by unite in this particular dataset
remove=T) %>%
mutate(instruments = as.numeric(grepl('TRUE', instruments)))
Выход:
train
# mix1_instruments mix2_instruments instruments
#1 Clarinet French Horn 1
#2 Flute French Horn 1
#3 Clarinet French Horn 1
#4 English Horn Flute 1
#5 Washboard Flute 1
#6 Saxophone Triangle 1
#7 Washboard Triangle 0
Примечание: %<>%
от magrittr
и просто заменяет синтаксис x <- x %>% ...
Вы можете вывести фрейм данных с функциями write.x , чтобы вывести его в виде csv:
write.csv(train, "/path/to/dir/filename.csv", row.names=F)