【问题标题】:How to convert a list of named numbers into a data.frame with ids based on list names?如何将命名数字列表转换为具有基于列表名称的 id 的 data.frame?
【发布时间】:2018-04-26 19:33:05
【问题描述】:

我正在尝试将命名数字列表作为 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

我已经尝试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

【问题讨论】:

    标签: r list


    【解决方案1】:

    也许

    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
    

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

    【讨论】:

    • map_dfr(dat, tibble::enframe, name = "news", value = "twitter", .id = "text") 的多合一解决方案。
    【解决方案2】:

    使用do.callgather 的解决方案:

    library(tidyverse)
    do.call(cbind, dat) %>% as.data.frame() %>% rownames_to_column("ngram") %>%
      gather(text, freq, - ngram)
    
    
    #                   ngram    text  freq
    # 1         new york city   blogs   816
    # 2        new york times   blogs   609
    # 3   amazon services llc   blogs   427
    # 4   services llc amazon   blogs   426
    # 5         llc amazon eu   blogs   426
    # 6      couple weeks ago   blogs   419
    # 7  incorporated item pp   blogs   390
    # 8         two years ago   blogs   353
    # 9          new york n.y   blogs   326
    # 10         world war ii   blogs   301
    # 11        new york city    news    96
    # 12       new york times    news    95
    # 13  amazon services llc    news    94
    # 14  services llc amazon    news    74
    # 15        llc amazon eu    news    66
    # 16     couple weeks ago    news    59
    # 17 incorporated item pp    news    51
    # 18        two years ago    news    50
    # 19         new york n.y    news    43
    # 20         world war ii    news    42
    # 21        new york city twitter  2219
    # 22       new york times twitter  1742
    # 23  amazon services llc twitter  1689
    # 24  services llc amazon twitter  1590
    # 25        llc amazon eu twitter   995
    # 26     couple weeks ago twitter   823
    # 27 incorporated item pp twitter   587
    # 28        two years ago twitter   562
    # 29         new york n.y twitter   554
    # 30         world war ii twitter   535
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2015-11-10
      • 2020-07-06
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多