3

I have a data frame/ tibble that looks like the following.

# # A tibble: 2 × 3
#       from_id             created_time      text
#         <chr>                    <chr>    <list>
# 1 10113538711 2017-02-10T23:33:01+0000 <chr [3]>
# 2 10113538711 2017-02-10T05:41:39+0000 <chr [5]>

I am wanting to spread the list items from the text column out over the rows so it looks like the following.

# # A tibble: 2 × 3
#         from_id             created_time                                text
#           <chr>                    <chr>                               <chr>
#   1 10113538711 2017-02-10T23:33:01+0000 "earlier this week we received ..."
#   1 10113538711 2017-02-10T23:33:01+0000 "lance payne's photo struck a c..."
#   1 10113538711 2017-02-10T23:33:01+0000 "this is his story:"
#   2 10113538711 2017-02-10T05:41:39+0000 "i'm melting, but extreme heat ..."
#   2 10113538711 2017-02-10T05:41:39+0000 "place the container in an area..."
#   2 10113538711 2017-02-10T05:41:39+0000 "please share far and wide."
#   2 10113538711 2017-02-10T05:41:39+0000 "thank you."
#   2 10113538711 2017-02-10T05:41:39+0000 "photo © tanya-dee johnson"

I thought to try tidy::separate() but that didn't work in my usage. I suspect it is some form of split, or separate, followed by a gather() or melt() however my R vocabulary is letting me down at the moment.

Any assistance on this would be greatly appreciated.

DPUT of my tibble.

> dput(df)

structure(list(from_id = c("10113538711", "10113538711"), created_time = c("2017-02-10T23:33:01+0000", 
"2017-02-10T05:41:39+0000"), text = structure(list(c("earlier this week we received shocking photos of a turtle hatchling emerging beside a lump of coal at mackay's east point beach near hay point – the largest coal port alongside the great barrier reef.", 
"lance payne's photo struck a chord around the country.", "this is his story:"
), c("i'm melting, but extreme heat causes significant stress particularly for all animals.", 
"place the container in an area where animals are protected from predators when drinking eg near a shrub or bush and keep your pets away from this area so that animals can drink undisturbed.", 
"please share far and wide.", "thank you.", "photo © tanya-dee johnson"
)), class = c("get_sentences", "list"))), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -2L), .Names = c("from_id", 
"created_time", "text"))
Ronak Shah
  • 377,200
  • 20
  • 156
  • 213
Dan
  • 2,625
  • 5
  • 27
  • 42

1 Answers1

3

We can use unnest

library(tidyverse)
unnest(df) 
akrun
  • 874,273
  • 37
  • 540
  • 662
  • 1
    that was fast! I'd accept the answer now accept SO won't let me. I knew it was a vocabulary issue. – Dan Feb 11 '17 at 05:41
  • @Dan The `melt` from `reshape2` and `gather` from `tidyr` are used for converting from 'wide' to 'long' format and it will not touch a `list` column. – akrun Feb 11 '17 at 05:42
  • 1
    Yeah, i knew they did that, I just thought there might need to be some sort of function that would cause the list to be split across columns. Clearly `unnest()` does it easily. – Dan Feb 11 '17 at 05:45