Разделяйте значения в поле по символам, создавайте несколько столбцов справа в зависимости от количества возможных разделений

Я задал ряд вопросов.

Отдельное содержимое поля

Разделите переменную в поле по символам.

Я думаю, это содержало несколько вопросов по одной и той же теме.

У меня были отличные ответы о том, как использовать отдельные строки, а затем отличный ответ о том, как отделить первого и последнего авторов от вектора символов.

Теперь я хотел бы узнать последнее:

В этом ответе Разделение столбца разделителем справа налево в R

количество столбцов известно. Как сказать «разделить эту строку на запятые и разбить их на неизвестное количество столбцов в зависимости от количества имен в списке авторов справа от исходного поля»?

Так что каждый автор становится ценностью в отдельном поле. Изначально думал, что его закинут / выкладывают. НО!

Хотя это пример, который я использовал: Автор

Драйгерс Р.Л., Верхей Ф.Р., Леентенс А.Ф., Калер С., Аалтен П.

во многих случаях количество авторов статьи (не включая и др.) будет> 1 и может составлять самое большее около 30.

Так. Последний вопрос по этой саге из трех частей ... Как мне выделить всех авторов в новое поле и могу ли я назвать новые поля чем-то вроде «Первый автор», «Второй автор» и т. Д. И так далее до «Последний автор».

Это разумно / ясно?

ценю, что есть два или три человека, которые помогают очень быстро.


person damo    schedule 15.11.2018    source источник
comment
взгляните на этот Как задать вопрос   -  person LuckyLikey    schedule 15.11.2018
comment
Это полезно, и я ценю отзывы. Я пытаюсь понять, как я мог бы сделать это лучше. Вначале я задал вопрос, на который был очень быстрый ответ, а затем предложение, которое я задаю вторую часть моего вопроса как новый вопрос. Думаю, потому что решение было очень простым. Затем этот следующий вопрос был снова разделен на третий вопрос. Что и дало такой ответ. Что я должен был здесь сделать?   -  person damo    schedule 15.11.2018
comment
вы могли бы предоставить минимальный воспроизводимый пример того, что вы уже пробовали. И, возможно, не писать свой вопрос, как в комиксе;) больше придерживаться фактов, а не писать ритмы прозы, помогает нам быстрее находить нужную информацию.   -  person LuckyLikey    schedule 19.11.2018
comment
В порядке. Спасибо. Не хочу спорить, но когда исходная проблема разбивается на несколько вопросов - что тогда? Я возьму на себя точку зрения о стиле письма.   -  person damo    schedule 19.11.2018
comment
alaway намеревался помочь тебе, парень. Чтобы ответить на этот вопрос: каждый вопрос должен соответствовать формату вопросов и ответов. То, что проблема может быть разделена на несколько более мелких проблем, которые необходимо решить, является обычным явлением в процессе разработки. Но множество мелких проблем составляют большую проблему. Поскольку вы задавали свои небольшие вопросы, вам следует полагаться на их упрощение до минимального воспроизводимого примера, который не связан с что угодно, кроме того, что вы читали и пробовали по этой конкретной проблеме. В любом случае вы научитесь этим вещам, если попытаетесь сами ответить на вопросы. Хорошего дня :)   -  person LuckyLikey    schedule 19.11.2018
comment
Ах хорошо. Так что вместо ссылок здесь должно было быть то, что было сделано до сих пор. Было бы целесообразно / полезно собрать все это вместе в одном посте и ответить? (Опять же, спасибо, что нашли время)   -  person damo    schedule 19.11.2018
comment
каждому разрешено задавать несколько вопросов в SO, но ИМХО они не должны зависеть друг от друга, а вместо этого должны быть автономными и следовать этим рекомендациям Как спросить минимальный воспроизводимый пример   -  person LuckyLikey    schedule 19.11.2018
comment
Я согласен, к сожалению, ответ на первый вопрос (с дополнительными просьбами) дан в ответе на этот вопрос ....   -  person damo    schedule 19.11.2018


Ответы (1)


Вы можете разделить столбец автора на список с помощью str_split, а затем использовать unnest, чтобы получить фрейм данных длинного формата с новым автором в каждой строке. Затем вы используете spread и столбец идентификатора, чтобы преобразовать данные в широкий формат.

library(dplyr)
library(tidyr)
df <- data.frame(publication = c("pub1","pub2","pub3"),author = c("Drijgers RL, Verhey FR, Leentjens AF, Kahler S, Aalten P","test author","test arthur, another author"))
df
#  publication                                                   author
#1        pub1 Drijgers RL, Verhey FR, Leentjens AF, Kahler S, Aalten P
#2        pub2                                              test author
#3        pub3                              test arthur, another author


df %>% group_by(publication) %>% mutate(author = str_split(author,", ")) %>% unnest %>% mutate(ID = paste0("author_",row_number())) %>% spread(ID,author)
# A tibble: 3 x 6
# Groups:   publication [3]
#  publication author_1    author_2       author_3     author_4 author_5
#  <fct>       <chr>       <chr>          <chr>        <chr>    <chr>   
#1 pub1        Drijgers RL Verhey FR      Leentjens AF Kahler S Aalten P
#2 pub2        test author NA             NA           NA       NA      
#3 pub3        test arthur another author NA           NA       NA  
person jasbner    schedule 15.11.2018
comment
Таким образом, он изменяется с помощью вставки «Автор + номер строки», которая разбивается по количеству авторов в списке авторов. Хороший. Спасибо! - person damo; 15.11.2018
comment
Функция mutate просто добавляет идентификатор для каждой строки в группе. Последовательная маркировка идентификаторов для каждой группы позволяет функции распространения превращать их в столбцы. - person jasbner; 15.11.2018
comment
да. Извините, я не знал, что там сказать. Я видел, что он генерирует ключ, разрешающий распространение и этикетку. Еще раз спасибо! - person damo; 15.11.2018