将数据集拆分为组,然后在 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
我正在尝试拆分我的数据集以便在 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