【问题标题】:Convert list into dataframe using tags as the values of a new column (with R)使用标签作为新列的值将列表转换为数据框(使用 R)
【发布时间】:2021-01-05 23:47:47
【问题描述】:

我有一个这样的列表:

require(tidyverse)
months <- c("january", "february", "march", "october", "december") 
weekdays <- c("Sunday", "Monday", "Tuesday")
seasons <- c("Summer", "Winter", "Fall", "autumn")
timeWords_list <- tibble::lst(months,  weekdays, seasons)

我想将此列表转换为两列-data.frame: 我需要列表的所有值都在第一列 并且标签是第二列的值

结果应该是这样的:

df <- data.frame(first_column  = c("january", "february", "march", "october", "december", "Sunday", "Monday", "Tuesday", "Summer", "Winter", "Fall", "autumn"), 
                 second_column = c("months", "months", "months", "months", "months", "weekdays", "weekdays" ,"weekdays", "seasons", "seasons", "seasons", "seasons"))

第二列可以是字符串或因子,但应与列表的标签相对应。请注意,列表可能有不同的大小,其元素可能有不同的长度。

【问题讨论】:

    标签: r data-transform


    【解决方案1】:

    一个简单的选择是stack 来自base R

    df1 <- stack(timeWords_list)
    names(df1) <- c("first_column", "second_column")
    

    【讨论】:

      【解决方案2】:

      我认为@akrunstack 方法是迄今为止最有效的方法。这是另一个使用 unlist + rep 的基本 R 选项

      data.frame(
        first_col = unlist(timeWords_list, use.names = FALSE),
        second_col = rep(names(timeWords_list), lengths(timeWords_list))
      )
      

      给了

         first_col second_col
      1    january     months
      2   february     months
      3      march     months
      4    october     months
      5   december     months
      6     Sunday   weekdays
      7     Monday   weekdays
      8    Tuesday   weekdays
      9     Summer    seasons
      10    Winter    seasons
      11      Fall    seasons
      12    autumn    seasons
      

      【讨论】:

        【解决方案3】:

        使用tibble::enframetidyr::unnest

        tibble::enframe(timeWords_list,name = 'first_column',value = 'second_column') %>%
          tidyr::unnest(second_column)
        
        # first_column second_column
        #   <chr>        <chr>        
        # 1 months       january      
        # 2 months       february     
        # 3 months       march        
        # 4 months       october      
        # 5 months       december     
        # 6 weekdays     Sunday       
        # 7 weekdays     Monday       
        # 8 weekdays     Tuesday      
        # 9 seasons      Summer       
        #10 seasons      Winter       
        #11 seasons      Fall         
        #12 seasons      autumn       
        

        【讨论】:

          猜你喜欢
          • 2014-08-18
          • 2015-11-14
          • 2022-01-22
          • 2015-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多