代码之家  ›  专栏  ›  技术社区  ›  User1414

基于不同字段值在R中创建子集数据集

  •  2
  • User1414  · 技术社区  · 6 年前

    我试图根据不同的字段值将数据集拆分为多个子集。例如:

    SaleID Country
    Sale1 US
    Sale2 Mexico
    Sale3 US
    Sale4 Canada
    Sale5 Canada
    Sale6 Mexico
    Sale7 Canada
    

    期望输出(3个子集)

    Data 1
    SaleID Country
    Sale1 US
    Sale3 US
    
    Data 2
    SaleID Country
    Sale2 Mexico
    Sale6 Mexico
    
    
    Data 3
    Sale4 Canada
    Sale5 Canada
    Sale7 Canada
    

    有什么想法吗?我的实际数据集有近100个不同的国家。我已经探索过在R中使用sqldf包,但还没有成功。任何帮助都将不胜感激

    2 回复  |  直到 6 年前
        1
  •  0
  •   G. Grothendieck    6 年前

    最好创建一个列表 L 这些数据集。然后您可以参考 L$US L[["US"]] ,并使用 names(L)

    L <- split(DF, DF$Country)
    

    可以使用以下行将它们复制到全局环境中的单个数据帧,但实际上不建议这样做:

    list2env(L, .GlobalEnv)
    
        2
  •  0
  •   akrun    6 年前

    我们可以使用 split 从…起 base R 到a list 属于 data.frame s、 数据集的顺序似乎是 unique 值显示在“Country”中。在这种情况下,我们可以将“国家”转换为 factor 具有的列 levels 指定的

    df$Country <- factor(df$Country, levels = unique(df$Country))
    lst <- lapply(split(df, df$Country), `row.names<-`, NULL)
    names(lst) <- paste0("Data", seq_along(lst))
    

    最好使用 列表 用于处理数据,而不是具有多个对象。但是,如果我们真的需要它 list2env

    list2env(lst, envir = .GlobalEnv)
    Data1
    #  SaleID Country
    #1  Sale1      US
    #2  Sale3      US
    
    Data2
    #  SaleID Country
    #1  Sale2  Mexico
    #2  Sale6  Mexico
    
    Data3
    #  SaleID Country
    #1  Sale4  Canada
    #2  Sale5  Canada
    #3  Sale7  Canada