У меня есть фрейм данных с несколькими уровнями фактора race
и group
, минимальный пример ниже:
id race group
1 1 White 1
2 2 White 1
3 3 White 1
4 4 White 1
5 5 White 1
6 6 White 2
7 7 White 2
8 8 White 2
9 9 White 2
10 10 Black 1
11 11 Black 1
12 12 Black 1
13 13 Black 2
14 14 Black 2
15 15 Black 2
16 16 Black 2
17 17 Hispanic 1
18 18 Hispanic 1
19 19 Hispanic 1
20 20 Hispanic 1
21 21 Hispanic 1
22 22 Hispanic 2
23 23 Hispanic 2
24 24 Hispanic 2
25 25 Hispanic 2
Я могу назначить индивидуальный фрейм данных, группирующий каждый уровень race
, на "White"
, изатем разделите данные на group
, используя функцию ниже.
filter.race <- function(x, y) { f <- subset(x, race == "White" | race == y)
f <- split(f, f$group)
f}
Что возвращает:
filter.race(df, "Black")
$`1`
id race group
1 1 White 1
2 2 White 1
3 3 White 1
4 4 White 1
5 5 White 1
10 10 Black 1
11 11 Black 1
12 12 Black 1
$`2`
id race group
6 6 White 2
7 7 White 2
8 8 White 2
9 9 White 2
13 13 Black 2
14 14 Black 2
15 15 Black 2
16 16 Black 2
filter.race(df, "Hispanic")
$`1`
id race group
1 1 White 1
2 2 White 1
3 3 White 1
4 4 White 1
5 5 White 1
17 17 Hispanic 1
18 18 Hispanic 1
19 19 Hispanic 1
20 20 Hispanic 1
21 21 Hispanic 1
$`2`
id race group
6 6 White 2
7 7 White 2
8 8 White 2
9 9 White 2
22 22 Hispanic 2
23 23 Hispanic 2
24 24 Hispanic 2
25 25 Hispanic 2
Однако я пытаюсь найти способ применить эту функцию на всех уровнях фрейма данных, а не индивидуально указывать y
несколько раз.
Пример данных:
dput(df)
structure(list(id = 1:25, race = structure(c(3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("Black", "Hispanic", "White"), class = "factor"),
group = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L)), .Names = c("id",
"race", "group"), class = "data.frame", row.names = c(NA, -25L
))