Kent
Kent

Reputation: 21

How to start a new line when it senses certain word in R?

So i have a text like below:

"Speaker 1: dasjkdasldasn Speaker 2: sadjasdkasd Speaker 1: sjdakldak Speak 2: sjdlaksdlsak Speaker 1: sjdaskd. " 

What are some functions that i could use to start a new line whenever a new speaker is speaking? The final outcome should be

"Speaker 1: dasjkdasldasn 
Speaker 2: sadjasdkasd 
Speaker 1: sjdakldak 
Speak 2: sjdlaksdlsak 
Speaker 1: sjdaskd."

Upvotes: 0

Views: 106

Answers (4)

Ronak Shah
Ronak Shah

Reputation: 388982

Using str_replace_all from stringr. Taking the string s from @ThomasIsCoding

cat(stringr::str_replace_all(s, '(Speak)', '\n\\1'))

#Speaker 1: dasjkdasldasn 
#Speaker 2: sadjasdkasd 
#Speaker 1: sjdakldak 
#Speak 2: sjdlaksdlsak 
#Speaker 1: sjdaskd. 

Upvotes: 0

pseudospin
pseudospin

Reputation: 2767

It depends on how closely you want to match the initial keywords. You can adjust the regular expression to be more or less strict.

strsplit(s,'\\s+(?=Speak(er)? \\d+:)',perl=TRUE)

Upvotes: 0

ThomasIsCoding
ThomasIsCoding

Reputation: 101518

If you always has keyword like Speak*, maybe we can try

cat(gsub("\\s(Speak.*?)","\n\\1",s),"\n")

such that

> cat(gsub("\\s(Speak.*?)","\n\\1",s),"\n")
Speaker 1: dasjkdasldasn
Speaker 2: sadjasdkasd
Speaker 1: sjdakldak
Speak 2: sjdlaksdlsak
Speaker 1: sjdaskd.

Data

s <- "Speaker 1: dasjkdasldasn Speaker 2: sadjasdkasd Speaker 1: sjdakldak Speak 2: sjdlaksdlsak Speaker 1: sjdaskd. " 

Upvotes: 1

akrun
akrun

Reputation: 887148

We can create the newline with gsub and print with cat

cat(gsub("\\s(\\w+\\s+\\d+:)", "\n\\1", str1, perl = TRUE), '\n')
#Speaker 1: dasjkdasldasn
#Speaker 2: sadjasdkasd
#Speaker 1: sjdakldak
#Speak 2: sjdlaksdlsak
#Speaker 1: sjdaskd.  

Or after inserting the newline, read it with read.table

read.table(text = gsub("\\s(\\w+\\s+\\d+:)", "\n\\1", str1), header = FALSE, sep=",")
#                        V1
#1 Speaker 1: dasjkdasldasn
#2   Speaker 2: sadjasdkasd
#3     Speaker 1: sjdakldak
#4    Speak 2: sjdlaksdlsak
#5     Speaker 1: sjdaskd.

data

str1 <- "Speaker 1: dasjkdasldasn Speaker 2: sadjasdkasd Speaker 1: sjdakldak Speak 2: sjdlaksdlsak Speaker 1: sjdaskd. " 

Upvotes: 2

Related Questions