我有一个数据集,其中一个变量重复出现。我想为重复变量的所有内容创建子集,以便可以将它们用作组而不是单个数据点。例如,我将类别1重复了20次,但是我想为类别1创建所有数据的子集,其中包含20个条目的内容。
我知道的唯一解决方案(我是菜鸟)是对每个类别使用subset命令。
Category 1 = data[Category 1== "Category1", ]
由于类别1每20个条目重复一次,因此共有19个类别。所以我单独使用了subset命令19次。 R是否可以通过某种方式识别类别1并将内容分类为子集,而无需我单独创建每个子集?
答案 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