【问题标题】:How do I create multiple subsets?如何创建多个子集?
【发布时间】:2019-09-11 11:59:05
【问题描述】:

我有一个数据集,其中一个变量重复出现。我想为重复变量的所有内容创建子集,以便我可以将它们用作组而不是单个数据点。例如,我将第 1 类重复了 20 次,但我想为第 1 类的所有数据创建一个子集,其中包含 20 个条目的内容。
我知道的唯一解决方案(我是菜鸟)是对每个类别使用子集命令。

Category 1 = data[Category 1== "Category1", ] 

由于类别 1 每 20 个条目重复一次,因此总共有 19 个类别。所以我单独使用了 19 次子集命令。 R 是否可以通过某种方式识别类别 1 并将内容分类为子集,而无需我单独创建每个子集?

【问题讨论】:

标签: r dataframe subset


【解决方案1】:

使用split 函数根据列创建子集列表。该列表将“拆分”组作为名称。

PlantGrowth 数据集为例:

summary(PlantGrowth)
#      weight       group   
#  Min.   :3.590   ctrl:10  
#  1st Qu.:4.550   trt1:10  
#  Median :5.155   trt2:10  
#  Mean   :5.073            
#  3rd Qu.:5.530            
#  Max.   :6.310

split(PlantGrowth, PlantGrowth[["group"]])
# $ctrl
#    weight group
# 1    4.17  ctrl
# 2    5.58  ctrl
# 3    5.18  ctrl
# 4    6.11  ctrl
# 5    4.50  ctrl
# 6    4.61  ctrl
# 7    5.17  ctrl
# 8    4.53  ctrl
# 9    5.33  ctrl
# 10   5.14  ctrl
#  
# $trt1
#    weight group
# 11   4.81  trt1
# 12   4.17  trt1
# 13   4.41  trt1
# 14   3.59  trt1
# 15   5.87  trt1
# 16   3.83  trt1
# 17   6.03  trt1
# 18   4.89  trt1
# 19   4.32  trt1
# 20   4.69  trt1
#  
# $trt2
#    weight group
# 21   6.31  trt2
# 22   5.12  trt2
# 23   5.54  trt2
# 24   5.50  trt2
# 25   5.37  trt2
# 26   5.29  trt2
# 27   4.92  trt2
# 28   6.15  trt2
# 29   5.80  trt2
# 30   5.26  trt2

【讨论】:

    【解决方案2】:

    这应该可以解决您面临的问题。我试图复制与您描述的问题类似的设置。

    set.seed(1234)
    library(tidyverse)
    df <- data.frame(
          x=rnorm(25),
          y=rnorm(25),
          g=rep(factor(LETTERS[1:5]), 5)
    )
    
    tt <- df %>% group_split(g)
    
    split_df<-function(list){
      for (i in 1:length(list)){
        assign(paste0("df",i), list[[i]], envir = .GlobalEnv)
      }
    }
    
    split_df(tt)
    

    所有不同的类别都将在您的环境中创建为单独的数据框

    【讨论】:

    • 创建一堆对象不是一个好主意。最好将它们列在一个列表中。您应该将library(...) 放入您的代码中以获得所需的包。
    • 感谢您的建议,我已添加库....但是,该问题特别希望作为不同的 df。因此,我将它们移动到不同的数据框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多