我正在尝试将我的数据集拆分为R中的分析。我首先要按组A或B拆分它们,然后按年龄拆分这些组。我尝试过使用split()函数,如下所示:
class
但是当我尝试Data <- read.csv("/users/SLA9DI/Documents/Test.csv")
split(Data,Data$Group)
时,它只按年龄分割它,当我尝试split(Data,Data$Age)
时会发生同样的事情。这些数据将用于比较年龄相同的人群。我也可能在以后抛出性别,所以如果我能在这些年龄段内按性别进行进一步分割,那将更有帮助。例如:
split(Data$Group,Data$Age)
编辑:将它们拆分成组,然后将这些组中的年龄分开,这样我就可以将16岁组B与16岁组A进行比较。此外,我可能希望将其进一步划分为性别之后,比较B组或A组的16岁女性,A组或B组16岁男性。
答案 0 :(得分:0)
首先,您是否考虑过将数据保存在一起并使用by()
或aggregate()
与某些函数进行分析,而不是多次拆分数据?
其次,您只需将第二次拆分应用于所有输出数据。最简单的方法是编写一个快速函数来包装并稍微修改内置split
,这样您就可以简单地传递要拆分的变量的变量名,而不是向量。 / p>
以下作品:
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
答案 1 :(得分:0)
我可能会这样做。首先通过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