Рассмотрим некоторые данные многоязычного словаря, например:
df <- structure(list(tra = c("1. authority, responsibility, dominion / autorité, responsabilité, pouvoir", "2. ability / capacité", "half, part, some / moitié, partie d'un tout", "do, make, operate, execute / faire, opérer, exécuter", "do (etc.) f.o.b. / faire (etc.) pour soi", "1. manière de réveiller. 2. manière de redonner la vie à un mort", "1. qui peut réveiller. 2. qui est capable de redonner la vie à un mort", "A. manière de respirer / respiration. B. vie", "A. manière de respirer / respiration. B. vie", "A. respirer. B. réveiller. C. être libre"), language = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("Afar", "Kabiye" ), class = "factor"), metalanguage = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("en/fr", "fr"), class = "factor")), .Names = c("tra", "language", "metalanguage"), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
Поле tra
иногда содержит английский и французский переводы, разделенные знаком /
, иногда только французский, как записано в поле metalanguage
. Вот чего я хочу добиться:
- оставьте столбец
tra
без изменений и добавьте два дополнительных столбцаtra_fr
иtra_en
- if
metalanguage == "en/fr", use
separate () _ 9_tra_enand
tra_fr` - если
metalanguage == "fr", fill
tra_frwith
tra` - делайте все это как часть большей последовательности глаголов dplyr, переданных по конвейеру.
Сначала я выбрал separate(tra,c("tra_en","tra_fr"), " / ", remove=F)
, но потом обнаружил, что "/" также используется в некоторых переводах, предназначенных только для французского (ура, если данные противоречивы). Поэтому мне нужен способ условно применить separate()
и mutate()
глаголы на основе поля metalanguage
. Как это сделать в трубе?
(Я изучал несколько предыдущих вопросов об использовании условных выражений и if_else () с конвейерными dplyr-глаголами, но пока мне не удалось применить то, что описано для mutate (), для отделения ().)