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

时间:2015-05-06 20:07:07

标签: r split

我正在尝试将我的数据集拆分为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岁男性

2 个答案:

答案 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