2017-02-11 17 views
1

У меня есть фрейм данных/кеш, который выглядит следующим образом.столбец с расщепленным списком по нескольким строкам [R]

# # 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]> 

Я хотел распространить list элементы из текстового столбца над строками, так что выглядит следующим образом.

# # 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" 

Я думал попробовать tidy::separate(), но это не работает в моем использования. Я подозреваю, что это какая-то форма раскола или отдельная, за которой следует gather() или melt(), однако моя лексика R в настоящее время меня пугает.

Любая помощь по этому вопросу будет принята с благодарностью.

DPUT моего сока.

> 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")) 

ответ

2

Мы можем использовать unnest

library(tidyverse) 
unnest(df) 
+1

это было быстро! Я бы согласился, ответ теперь принимается, так что я не позволю. Я знал, что это проблема словарного запаса. – Dan

+0

@Dan 'melt' from' reshape2' и 'gather' from' tidyr' используются для преобразования из формата «широкий» в «длинный» и не будут касаться столбца «list». – akrun

+1

Да, я знал, что они это сделали, я просто подумал, что, возможно, потребуется какая-то функция, которая приведет к тому, что список будет разбит по столбцам. Ясно, что 'unnest()' делает это легко. – Dan