Я работаю с парными животными (самцами и самками) нескольких видов и проводил повторные измерения на нескольких этапах жизни.
Вот тип фрейма данных, с которым я работаю:
> ID <- rep(c(seq(from=1, to=4), seq(from=5, to=8)), times=2)
> partner <- rep(c(seq(from=4, to=1), seq(from=8, to=5)), times=2)
> stage<- c(rep("juvenile", 8), rep("adult", 8))
> sex<- rep((rep(c("male", "female"), each=2)), times=4)
> species<-rep(c("a", "b"), each=4, times=2)
> df<-data.frame(ID, partner, stage, sex, species)
ID partner stage sex species
1 1 4 juvenile male a
2 2 3 juvenile male a
3 3 2 juvenile female a
4 4 1 juvenile female a
5 5 8 juvenile male b
6 6 7 juvenile male b
7 7 6 juvenile female b
8 8 5 juvenile female b
9 1 4 adult male a
10 2 3 adult male a
11 3 2 adult female a
12 4 1 adult female a
13 5 8 adult male b
14 6 7 adult male b
15 7 6 adult female b
16 8 5 adult female b
Я хочу добавить факторную переменную с различным уровнем для каждого отдельного самца в пределах вида (например, индивид с ID = 1 всегда имеет уровень фактора A, ID = 2 имеет уровень фактора B и т. Д.), А затем я хочу, чтобы его у партнера должен быть один и тот же уровень фактора (ID = 10 имеет уровень фактора A, ID = 9 имеет уровень фактора B и т. д.). Вот как это должно выглядеть (этот пример невероятно прост):
> df
ID partner stage sex species WANTED
1 1 4 juvenile male a A
2 2 3 juvenile male a B
3 3 2 juvenile female a A
4 4 1 juvenile female a B
5 5 8 juvenile male b A
6 6 7 juvenile male b B
7 7 6 juvenile female b A
8 8 5 juvenile female b B
9 1 4 adult male a A
10 2 3 adult male a B
11 3 2 adult female a A
12 4 1 adult female a B
13 5 8 adult male b A
14 6 7 adult male b B
15 7 6 adult female b A
16 8 5 adult female b B
Важно отметить:
- В реальном наборе данных число особей не одинаково среди видов, так что если я возьму буквы в качестве уровней факторов, у вида x с 4 особями будут уровни факторов от A до D, тогда как у вида y с 6 особями будет иметь уровни факторов от А до F.
- Я хочу, чтобы уровни факторов начинались заново при работе с другими видами (в моем примере фрейма данных ID = 1 имеет уровень фактора A, как и ID = 11, потому что это другой вид).
- Один и тот же человек должен иметь одинаковый уровень фактора на всех стадиях (ювенильный и взрослый)
Заранее спасибо!
EDIT
Вот мой реальный кадр данных, показанный dput
, со всеми его трудностями:
Извините за его длину! (не уверен, как скрыть это в выпадающем списке).
Подводя итог, что я хочу:
- новая факторная переменная, где у каждого человека есть свой факторный уровень, повторяемый на всех этапах жизни
- два партнера из данной пары имеют одинаковый уровень фактора
- уровни факторов повторяются среди видов (штаммов), например, BW имеет A1, A2, ... A8, а LL имеет A1, A2, ... A9
structure(list(ID = c(11489L, 11862L, 11539L, 11713L, 11271L,
9225L, 11588L, 9906L, 11039L, 9717L, 11539L, 11713L, 11489L,
11862L, 11403L, 11070L, 11271L, 9225L, 11039L, 9717L, 11588L,
9906L, 12124L, 12021L, 12029L, 12126L, 12020L, 12030L, 12125L,
10450L, 11371L, 11605L, 11327L, 11019L, 11741L, 11586L, 11740L,
11585L, 10575L, 11855L, 11500L, 11403L, 11070L, 11539L, 11713L,
11740L, 11585L, 11327L, 11019L, 11489L, 11862L, 12124L, 12021L,
11371L, 11605L, 12631L, 12304L, 12303L, 10008L, 12630L, 12275L,
12272L, 10007L, 12029L, 12126L, 12125L, 10450L, 11271L, 9225L,
11588L, 9906L, 11039L, 9717L, 12020L, 12030L, 12910L, 11588L,
9906L, 11039L, 9717L, 11539L, 11713L, 11271L, 9225L, 11403L,
11070L, 12094L, 12095L, 11255L, 12390L, 11257L, 11740L, 11585L,
11327L, 11019L, 11371L, 11605L, 12097L, 11611L, 12124L, 12021L,
12029L, 12126L, 12125L, 10450L, 12020L, 12030L, 12110L, 12910L,
12095L, 11740L, 11585L, 11255L, 12097L, 12390L, 11257L, 11611L,
12094L, 12631L, 12304L, 12303L, 10008L, 11209L, 12630L, 12275L,
11403L, 11070L, 12272L, 10007L, 12124L, 12021L, 11489L, 11862L,
10744L, 11209L, 10575L, 12110L, 10744L, 11069L, 11827L, 11066L,
12816L, 12415L, 12911L, 11248L, 12979L, 12746L, 12912L, 11855L,
11500L, 11741L, 11586L, 12125L, 10450L, 11248L, 12979L, 12746L,
12912L, 11066L, 12816L, 11643L, 11435L, 11069L, 11827L, 11327L,
11019L, 11371L, 11605L, 12631L, 12304L, 12272L, 10007L, 12630L,
12275L, 12910L, 12095L, 11209L, 10575L, 11643L, 11435L, 12110L,
10744L, 12771L, 12388L, 11611L, 12094L, 11255L, 12097L, 12390L,
11257L, 12272L, 10007L, 12303L, 10008L, 12631L, 12304L, 11855L,
11500L, 12910L, 12095L, 11255L, 12097L, 11741L, 11586L, 12771L,
12388L, 11069L, 11827L, 11066L, 12816L, 11611L, 12094L, 11855L,
11500L, 11643L, 11435L, 12303L, 10008L, 11741L, 11586L, 11209L,
10575L, 12746L, 12912L, 11248L, 12979L, 12630L, 12275L, 12110L,
10744L, 12029L, 12126L, 11066L, 12816L, 12415L, 12911L, 11069L,
11827L, 12771L, 12388L, 11643L, 11435L, 12746L, 12912L, 11248L,
12979L, 12415L, 12911L, 12390L, 11257L, 12415L, 12911L, 12020L,
12030L, 12771L, 12388L), Partner_ID = c(11862L, 11489L, 11713L,
11539L, 9225L, 11271L, 9906L, 11588L, 9717L, 11039L, 11713L,
11539L, 11862L, 11489L, 11070L, 11403L, 9225L, 11271L, 9717L,
11039L, 9906L, 11588L, 12021L, 12124L, 12126L, 12029L, 12030L,
12020L, 10450L, 12125L, 11605L, 11371L, 11019L, 11327L, 11586L,
11741L, 11585L, 11740L, 11209L, 11500L, 11855L, 11070L, 11403L,
11713L, 11539L, 11585L, 11740L, 11019L, 11327L, 11862L, 11489L,
12021L, 12124L, 11605L, 11371L, 12304L, 12631L, 10008L, 12303L,
12275L, 12630L, 10007L, 12272L, 12126L, 12029L, 10450L, 12125L,
9225L, 11271L, 9906L, 11588L, 9717L, 11039L, 12030L, 12020L,
12095L, 9906L, 11588L, 9717L, 11039L, 11713L, 11539L, 9225L,
11271L, 11070L, 11403L, 11611L, 12910L, 12097L, 11257L, 12390L,
11585L, 11740L, 11019L, 11327L, 11605L, 11371L, 11255L, 12094L,
12021L, 12124L, 12126L, 12029L, 10450L, 12125L, 12030L, 12020L,
10744L, 12095L, 12910L, 11585L, 11740L, 12097L, 11255L, 11257L,
12390L, 12094L, 11611L, 12304L, 12631L, 10008L, 12303L, 10575L,
12275L, 12630L, 11070L, 11403L, 10007L, 12272L, 12021L, 12124L,
11862L, 11489L, 12110L, 10575L, 11209L, 10744L, 12110L, 11827L,
11069L, 12816L, 11066L, 12911L, 12415L, 12979L, 11248L, 12912L,
12746L, 11500L, 11855L, 11586L, 11741L, 10450L, 12125L, 12979L,
11248L, 12912L, 12746L, 12816L, 11066L, 11435L, 11643L, 11827L,
11069L, 11019L, 11327L, 11605L, 11371L, 12304L, 12631L, 10007L,
12272L, 12275L, 12630L, 12095L, 12910L, 10575L, 11209L, 11435L,
11643L, 10744L, 12110L, 12388L, 12771L, 12094L, 11611L, 12097L,
11255L, 11257L, 12390L, 10007L, 12272L, 10008L, 12303L, 12304L,
12631L, 11500L, 11855L, 12095L, 12910L, 12097L, 11255L, 11586L,
11741L, 12388L, 12771L, 11827L, 11069L, 12816L, 11066L, 12094L,
11611L, 11500L, 11855L, 11435L, 11643L, 10008L, 12303L, 11586L,
11741L, 10575L, 11209L, 12912L, 12746L, 12979L, 11248L, 12275L,
12630L, 10744L, 12110L, 12126L, 12029L, 12816L, 11066L, 12911L,
12415L, 11827L, 11069L, 12388L, 12771L, 11435L, 11643L, 12912L,
12746L, 12979L, 11248L, 12911L, 12415L, 11257L, 12390L, 12911L,
12415L, 12030L, 12020L, 12388L, 12771L), Strain = structure(c(1L,
1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 4L, 1L, 1L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 3L, 3L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 2L, 4L, 4L, 4L, 4L, 1L,
1L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 2L, 2L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 3L, 3L, 4L, 4L, 3L, 3L,
3L, 3L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 3L, 3L, 2L, 2L, 2L, 2L, 4L, 4L, 1L,
1L, 4L, 4L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 4L,
4L, 1L, 1L, 4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L,
3L, 3L, 3L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 3L, 3L, 4L, 4L, 4L,
4L, 2L, 2L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 4L, 4L, 2L, 2L, 2L,
2L, 3L, 3L, 4L, 4L, 3L, 3L, 4L, 4L, 2L, 2L, 4L, 4L, 3L, 3L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("BW",
"IS", "LL", "PO"), class = "factor"), State = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 2L, 2L, 2L, 2L,
3L, 3L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 1L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L,
1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 2L, 2L, 4L, 4L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 4L, 4L, 2L, 2L,
4L, 4L, 4L, 4L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 1L,
1L, 2L, 2L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 2L, 2L, 3L, 3L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L,
4L, 4L, 4L, 3L, 3L, 4L, 4L, 4L, 4L, 3L, 3L, 2L, 2L, 3L, 3L, 3L,
3L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 3L, 3L, 3L,
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 3L, 3L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 4L, 4L, 4L, 4L), .Label = c("Virgin",
"Mated", "Expecting", "Parent"), class = "factor"), Sex = structure(c(1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("F",
"M"), class = "factor")), .Names = c("ID", "Partner_ID", "Strain",
"State", "Sex"), row.names = c(NA, -256L), class = "data.frame")
Так бы это выглядело так:
ID Partner_ID Strain State Sex WANTED
1 11489 11862 BW Virgin F A1
2 11862 11489 BW Virgin M A1
3 11539 11713 BW Virgin F A2
4 11713 11539 BW Virgin M A2
5 11271 9225 PO Virgin F A1
6 9225 11271 PO Virgin M A1
7 11588 9906 PO Virgin F A2
8 9906 11588 PO Virgin M A2
9 11039 9717 PO Virgin F A3
10 9717 11039 PO Virgin M A3
11 11539 11713 BW Mated F A2
12 11713 11539 BW Mated M A2
13 11489 11862 BW Mated F A1
14 11862 11489 BW Mated M A1
15 11403 11070 PO Virgin F A4
16 11070 11403 PO Virgin M A4
17 11271 9225 PO Mated F A1
18 9225 11271 PO Mated M A1
19 11039 9717 PO Mated F A3
20 9717 11039 PO Mated M A3