РЕДАКТИРОВАТЬ: Я немного отредактировал свой вопрос, потому что предложенное решение было немного проблематично для моего набора данных.ОП написано ниже.
У меня есть набор данных df, из которых prop
- это количество наблюдений в этом году, как доля от общего количества наблюдений.Например: для Нидерландов (NLD) 60% наблюдений имеют 2005 год. Для Болгарии (BLG) это 50%.
row country year prop
1: 1 NLD 2005 0.6
2: 2 NLD 2005 0.6
3: 3 BLG 2006 0.5
4: 4 BLG 2005 0.5
5: 5 GER 2005 1.0
6: 6 NLD 2007 0.2
7: 7 NLD 2005 0.6
8: 8 NLD 2008 0.2
Я хочу получить следующее:
row country prop2005 prop2006 prop2007 prop 2008
1: 1 NLD 0.6 0.0 0.2 0.2
2: 2 NLD 0.6 0.0 0.2 0.2
3: 3 NLD 0.6 0.0 0.2 0.2
4: 4 BLG 0.5 0.5 0.0 0.0
5: 5 BLG 0.5 0.5 0.0 0.0
6: 6 BLG 0.5 0.5 0.0 0.0
7: 7 GER 1.0 0.0 0.0 0.0
8: 8 GER 1.0 0.0 0.0 0.0
9: 9 GER 1.0 0.0 0.0 0.0
ОРИГИНАЛЬНАЯ ПОЧТА:
У меня есть набор данных df, в котором prop
- это количество наблюдений в этом году, как доля от общего числа наблюдений.Например: для Нидерландов (NLD) 60% наблюдений имеют 2005 год. Для Болгарии (BLG) это 50%.
row country year prop
1: 1 NLD 2005 0.6
2: 2 NLD 2005 0.6
3: 3 BLG 2006 0.5
4: 4 BLG 2005 0.5
5: 5 GER 2005 1.0
6: 6 NLD 2007 0.2
7: 7 NLD 2005 0.6
8: 8 NLD 2008 0.2
Я хотел бы связать эти значения с другим набором данных (df2
, который имеет вопросы, относящиеся к тем годам) и выглядит следующим образом:
row country q05 q06 q07 q08
1: 1 NLD 1 2 1 3
2: 2 NLD 2 1 2 3
3: 3 NLD 1 2 2 4
4: 4 BLG 5 5 2 4
5: 5 BLG 1 2 1 1
6: 6 BLG 2 2 5 1
7: 7 GER 3 5 4 4
8: 8 GER 2 5 3 4
9: 9 GER 1 2 3 5
Я хочу получить следующее:
row country prop2005 prop2006 prop2007 prop 2008
1: 1 NLD 1 2 1 3 0.6 0.0 0.2 0.2
2: 2 NLD 2 1 2 3 0.6 0.0 0.2 0.2
3: 3 NLD 1 2 2 4 0.6 0.0 0.2 0.2
4: 4 BLG 5 5 2 4 0.5 0.5 0.0 0.0
5: 5 BLG 1 2 1 1 0.5 0.5 0.0 0.0
6: 6 BLG 2 2 5 1 0.5 0.5 0.0 0.0
7: 7 GER 3 5 4 4 1.0 0.0 0.0 0.0
8: 8 GER 2 5 3 4 1.0 0.0 0.0 0.0
9: 9 GER 1 2 3 5 1.0 0.0 0.0 0.0
Другими словами, для каждого наблюдения,Я хочу, чтобы пропорции, связанные с этой страной, были добавлены к наблюдению (поскольку они функционируют как вес).
Я достаточно знаком со слиянием в data.table;
df1 <- merge(df1, df2, by= "country", all.x = TRUE, allow.cartesian=FALSE)
Однако ядействительно не знаю, как мне изменить форму data.table, чтобы правильно объединить его.
Есть предложения?
ТЕКУЩЕЕ "РЕШЕНИЕ":
df1 <- dcast(df1, country~year, value="prop")
df1 <- merge(df1, df2, by= "country", all.x = TRUE, allow.cartesian=FALSE)