Я хотел бы задать вопрос, связанный с вариантами разделения строк в R. Насколько я знаю, я вижу три варианта. strsplit()
в базе, str_split()
в пакете stringr
и separate()
в пакете tidy
. Интересно, чем они отличаются с точки зрения программирования. Учитывая, что я не обучен программированию, это предложение может быть неясным. Позвольте привести пример. В прошлом я узнал разницу между rbind()
и rbindlist()
в пакете data.table
. (Почему rbindlist лучше, чем rbind?). Это было отличным уроком для меня. Я хотел бы знать, какой вариант строки лучше, чем другие, как в этом посте, посвященном rbind()
и rbindlist()
. Я надеюсь, что этот пример прояснит то, что я пытаюсь спросить. Спасибо, что уделили время.
параметры разделения строки в R
comment
Я рекомендую вам попробовать каждый из них. :) Используйте пакет microbenchmark, чтобы проверить, какой из них работает быстрее.
- person mgriebe   schedule 14.08.2014
comment
Этот сайт предназначен не для поиска мнений, а для ответов на вопросы по программированию. Перефразируйте свой вопрос так, чтобы на него можно было дать объективный ответ.
- person Roman Luštrik   schedule 14.08.2014
comment
Роман, спасибо за комментарии. Я не собирался искать варианты. Я скорее хотел знать, чем они отличаются с точки зрения программирования. Я предполагаю, что мое намерение не осуществилось, учитывая, что английский - мой второй язык. Я перефразирую свой вопрос. Спасибо.
- person jazzurro   schedule 14.08.2014
comment
Если вы действительно пытаетесь осмотреться, в пакете QDAP есть colSplit() и colSplit2df().
- person lawyeR   schedule 14.08.2014
Ответы (1)
В отличие от strsplit() и str_split(), функция 'separate' берет фрейм данных и помещает выходные данные в отдельные столбцы фрейма данных. str_split позволяет указать максимальное количество строк, возвращаемых для любого разделения.
Есть много способов разделить строки (в некоторых случаях вы можете использовать substr и/или grep). Для больших данных рассмотрите ответы в этом сообщении: Разделить текстовую строку в столбцах data.table
Вот некоторые результаты тестов, и вы можете создать свои собственные:
require(microbenchmark)
require(stringr)
require(tidyr)
require(data.table)
dt<-data.table(a=letters[1:20],b=letters[15:21],c=1:100)
dt[,d:=paste(a,b,sep=".")]
this<-dt[,d]
microbenchmark(strsplit(this,"[.]"),str_split(this,"[.]"),separate(dt,"d",c("e","f"),"[.]"))
# Unit: microseconds
# expr min lq median uq max neval
# strsplit(this, "[.]") 53.432 56.753 59.4705 62.941 103.846 100
# str_split(this, "[.]") 4390.459 4878.137 5020.0180 5118.127 6598.367 100
# separate(dt, "d", c("e", "f"), "[.]") 165.126 178.107 189.7290 232.142 299.460
person
mgriebe
schedule
14.08.2014