如何使用基于列表名称的ID将指定数字列表转换为data.frame?

JHa*_*651 2 r list

我试图获得一个命名数字列表作为data.frame,以便更容易在ggplot2中绘图.我的列表看起来像这样:

dat <- list()
dat[[1]] <- c( 816, 609, 427, 426, 426, 419, 390, 353, 326, 301)
dat[[2]] <- c(96, 95, 94, 74, 66, 59, 51, 50, 43, 42)
dat[[3]] <- c(2219, 1742, 1689, 1590, 995, 823, 587, 562, 554, 535)
names(dat[[1]]) <-
    c("new york city", "new york times", "amazon services llc", "services llc amazon",
      "llc amazon eu", "couple weeks ago", "incorporated item pp", "two years ago",
      "new york n.y", "world war ii")
names(dat[[2]]) <-
    c("new york city", "president barack obama", "two years ago" ,
      "st louis county",     "gov chris christie", "first time since" ,
      "world war ii", "three years ago", "new york times", "four years ago")
names(dat[[3]]) <-
    c("let us know", "happy mothers day", "happy new year",
      "happy mother's day", "cinco de mayo", "looking forward seeing",
      "just got back", "keep good work", "come see us", "love love love")
names(dat) <- c("blogs","news","twitter")

dat
Run Code Online (Sandbox Code Playgroud)

我试过unlist()这个数据,我知道有一个简单的方法可以做到这一点.也许在data.table或dplyr中.但我总是得到有趣的结果.

所需的形式是:

dat1 <- data.frame(ngram = c("new york city", "new york times", "amazon services llc", "services llc amazon",
                         "llc amazon eu", "couple weeks ago", "incorporated item pp", "two years ago",
                         "new york n.y", "world war ii"),
               freq = c( 816, 609, 427, 426, 426, 419, 390, 353, 326, 301), 
               text = c("Blogs"))
dat2 <- data.frame(ngram = c("new york city", "president barack obama", "two years ago" ,
                         "st louis county",     "gov chris christie", "first time since" ,
                         "world war ii", "three years ago", "new york times", "four years ago"),
               freq = c(96, 95, 94, 74, 66, 59, 51, 50, 43, 42),
               text = "News")
dat3 <- data.frame(ngram = c("let us know", "happy mothers day", "happy new year",
                         "happy mother's day", "cinco de mayo", "looking forward seeing",
                         "just got back", "keep good work", "come see us", "love love love"),
               freq = c(2219, 1742, 1689, 1590, 995, 823, 587, 562, 554, 535),
               text = "Twitter")
dat <- rbind(dat1,dat2,dat3)

dat
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 6

也许

purrr::map_dfr(.x = dat,tibble::enframe,.id = "text")

# A tibble: 30 x 3
    text                 name value
   <chr>                <chr> <dbl>
 1 blogs        new york city   816
 2 blogs       new york times   609
 3 blogs  amazon services llc   427
 4 blogs  services llc amazon   426
 5 blogs        llc amazon eu   426
 6 blogs     couple weeks ago   419
 7 blogs incorporated item pp   390
 8 blogs        two years ago   353
 9 blogs         new york n.y   326
10 blogs         world war ii   301
# ... with 20 more rows
Run Code Online (Sandbox Code Playgroud)

仍然需要重命名两个变量,但我认为这非常接近?

  • `map_dfr(dat,tibble :: enframe,name ="news",value ="twitter",.id ="text")`用于一体化解决方案. (3认同)