如何创建多个子集?

时间:2019-09-11 11:59:05

标签: r dataframe subset

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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)

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

答案 1 :(得分:0)

使用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