将数据集拆分为组,然后在 R 中按年龄拆分这些组

Split Data Set into Group and then split those groups out by age in R

我正在尝试拆分我的数据集以便在 R 中进行分析。我首先想按组 A 或 B 拆分它们,然后按年龄拆分这些组。我试过如下使用 split() 函数:

Data <- read.csv("/users/SLA9DI/Documents/Test.csv")
split(Data,Data$Group)

但是当我尝试 split(Data,Data$Age) 时,它只按年龄拆分,当我尝试 split(Data$Group,Data$Age) 时,同样的事情发生了。这些数据将用于比较同龄人群。我也可能稍后会加入性别,所以如果我能在这些年龄段内按性别进一步划分,那会更有帮助。示例:

Group   Age   Data  Data2
A         13    15  10
A         13    14  6
A         18    13  2
A          8    13  8
A         12    2   2
A         14    2   2
A         16    3   2
A         16    4   4
A         16    23  5
A         16    15  4
B         13    5   5
B         13    56  6
B         18    6   1
B          8    76  6
B         12    7   3
B         14    8   2
B         16    9   2
B         16    10  5
B         16    11  6
B         16    12  7

编辑:将他们分组,然后将这些组内的年龄分开,这样我就可以比较 16 岁组 B 和 16 岁组 A。此外,我可能想进一步拆分稍后进入性别,比如说比较 B 组或 A 组中的 16 岁 女性 与 A 组或 B 组中的 16 岁 男性

首先,您是否考虑过将数据保存在一起并使用 by()aggregate() 以及一些函数来进行分析,而不是多次拆分数据?

其次,您只需将第二次拆分应用于所有输出数据。最简单的方法是编写一个快速函数来包装并稍微修改内置 split ,这样您就可以简单地传递要拆分的变量的变量名,而不是向量。

以下作品:

options(stringsAsFactors = FALSE)
testdata <- data.frame(Age=c(10,11,9,10,13,12,11,9,10,8,13),
                       Group=c("A","B","A","C","D","A","A","A","C","B","C"),
                       Var1=c(3,4,1,3,3,1,7,3,1,7,4))

func.split_wrapper <- function(dataframe,varname) {return(split(x = dataframe,f = dataframe[[varname]]))}

testdata.split1 <- func.split_wrapper(dataframe = testdata,varname = "Age")
testdata.split2 <- lapply(X = testdata.split1,FUN = func.split_wrapper,varname = "Group")

print(testdata.split2)

$`8`
$`8`$B
   Age Group Var1
10   8     B    7


$`9`
$`9`$A
  Age Group Var1
3   9     A    1
8   9     A    3


$`10`
$`10`$A
  Age Group Var1
1  10     A    3

$`10`$C
  Age Group Var1
4  10     C    3
9  10     C    1


$`11`
$`11`$A
  Age Group Var1
7  11     A    7

$`11`$B
  Age Group Var1
2  11     B    4


$`12`
$`12`$A
  Age Group Var1
6  12     A    1


$`13`
$`13`$C
   Age Group Var1
11  13     C    4

$`13`$D
  Age Group Var1
5  13     D    3

我可能会这样做。首先通过expand.grid()获得独特的组和性别对。然后遍历列。

set.seed(1237)
df <- data.frame(group = sample(c("A","B"), 10, replace = T),
                 gender = sample(c("M","F"), 10, replace = T),
                 age = sample(c(20:25), 10, replace = T))

grid <- unique(expand.grid(df$group, df$gender))
names(grid) <- c("group", "gender")
grid

#group gender
#1      A      M
#2      B      M
#11     A      F
#12     B      F

lapply(1:nrow(grid), function(x) {
  df[df$group == grid[x, 1] & df$gender == grid[x, 2],]
})

[[1]]
group gender age
1     A      M  22
3     A      M  25
4     A      M  20
8     A      M  22

[[2]]
group gender age
6      B      M  24
9      B      M  25
10     B      M  22

[[3]]
group gender age
5     A      F  20

[[4]]
group gender age
2     B      F  24
7     B      F  25