Исходя из вашего кода и вашего описания данных, я пришел к выводу, что каждая строка в data$authors_address
на самом деле выглядит примерно так, с информацией об авторе, разделенной ::
:
Jacod, Jean@Univ Paris 06, Inst Math Jussieu, F-75005 Paris, France::Reiss, Markus@Humboldt Univ, Inst Math, D-10099 Berlin, Germany
Одно предложение: CSV - это просто один тип плоского файла, и он может не подходить для вашего вывода, если число авторов варьируется.Это все еще выполнимо, но их лучшие варианты.Простой текстовый файл, где каждая группа авторов добавляется в новую строку, будет работать очень хорошо.Например:
for (s in data$authors_address){
re <- paste(sub("(.*)@.*", "\\1", strsplit(s, "::")[[1]]), collapse = " - ")
write(re, "E:\\output.txt", append = T)
}
Файл output.txt
будет выглядеть примерно так:
Jacod, Jean - Reiss, Markus
Doe, John - Doe, Jane - Guy, Some
Butts, Seymour
...
Обратите внимание, что сначала я сворачиваю векторы, используя -
в качестве разделителя, в противном случае каждый векторэлемент будет добавлен к своей собственной строке.Вам также понадобится это, если вы используете одну из других опций write.*
.
Вы можете сделать что-то подобное, используя write.table
(write.csv
может быть немного странно при добавлении,поэтому я не рекомендую это) , но для правильного понимания необходимо еще несколько аргументов:
for (s in data$authors_address){
re <- paste(sub("(.*)@.*", "\\1", strsplit(s, "::")[[1]]), collapse = " - ")
write.table(re, file = "E:\\output.csv", append = T, sep = ",", col.names = F,
row.names = F
)
}
Как вы можете видеть, используя write
вместо write.table
/ write.csv
немного упрощает вещи.