【问题标题】:Isolate data frames from a spreadsheet to create a list从电子表格中分离数据框以创建列表
【发布时间】:2018-12-11 03:42:27
【问题描述】:

如何将 R 中的数据帧从大型数据电子表格中分离出来,并从孤立的数据帧中创建一个列表?

比如我的不同州不同Groups销售的苹果销量数据就是这样的格式:

> data
1                    NSW   VIC   QLD
2 Group1       2013  500   501   985     
3              2014  601   520   999
4              2015  410   435   894
5 Group2       2013  508   501   806     
6              2014  694   780   899
7 Group3       2013  305   501   985     
8              2014  122   440   704
9              2015  210   235   523

我希望 Group1(第 2 到 4 行)的所有数据都是 dataframe1, 来自 Group2(第 5 行到第 6 行)的数据为 dataframe2, 来自 Group3(第 7 到 9 行)的数据成为 dataframe3 等。

然后我列个清单:

data.list <- list(dataframe1,dataframe2,dataframe3, ....)

由于每个数据框的行数可能不同,因此我无法执行一个循环来为每 x 行数创建一个数据框。根据包含“组”隶属关系的第一列将原始数据集分成单独的数据框的最佳方法是什么?

我想创建一个如下所示的列表:

> data.list
[[Group1]]
                     NSW   VIC   QLD
1              2013  500   501   985     
2              2014  601   520   999
3              2015  410   435   894

[[Group2]]
                     NSW   VIC   QLD
1              2013  508   501   806     
2              2014  694   780   899

[[Group3]]
                     NSW   VIC   QLD
1              2013  305   501   985     
2              2014  122   440   704
3              2015  210   235   523
  • 注意:这只是虚拟数据,请随意读取最容易编写代码的任何数据。

【问题讨论】:

    标签: r list dataframe


    【解决方案1】:
    df <- structure(list(group = structure(c(2L, 1L, 1L, 3L, 1L, 4L, 1L, 
                                             1L), .Label = c("", "Group1", "Group2", "Group3"), class = "factor"), 
                         year = c(2013L, 2014L, 2015L, 2013L, 2014L, 2013L, 2014L, 
                                  2015L), NSW = c(500L, 601L, 410L, 508L, 694L, 305L, 122L, 
                                                  210L), VIC = c(501L, 520L, 435L, 501L, 780L, 501L, 440L, 
                                                                 235L), QLD = c(985L, 999L, 894L, 806L, 899L, 985L, 704L, 
                                                                                523L)), class = "data.frame", row.names = c(NA, -8L))
    
    df_list <- split(df, as.factor(df$group))
    

    split 将帮助您使用 baseR 从组中创建各种列表

    【讨论】:

    • 谢谢!我发现split 命令在我首先用他们的组关联填充其余列时起作用:df[df==""] &lt;- NA 然后df&lt;-df %&gt;% fill(group)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多