2014-11-04 147 views
0

我有看起來像這樣的數據幀具有不同的柱(由699個條約簡化):創建基於另一列

TRT <- data.frame(T.ID=c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8), 
       Treaty=c("hungary slovenia 1994", "hungary slovenia 1994", 
           "nicaragua taiwan 2006", "nicaragua taiwan 2006", 
           "ukraine uzbekistan 1994", "ukraine uzbekistan 1994", 
           "brazil uruguay 1986", "brazil uruguay 1986", 
           "albania macedonia 2002", "albania macedonia 2002", 
           "albania moldova 2003", "albania moldova 2003", 
           "albania romania 2003", "albania romania 2003", 
           "Treaty of Izmir 1977","Treaty of Izmir 1977", 
           "Treaty of Izmir 1977"), 
       sc.y=c("HUN1994", "SLV1994", "NIC2006", "TAW2006", "UKR1994", 
        "UZB1994", "BRA1986", "URU1986", "ALB2002", "MAC2002", 
        "ALB2003", "MLD2003", "ALB2003", "RUM2003", "IRN1977", 
        "TUR1977", "PAK1977"), 
       prom.demo=c(1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0), 
       polity=c(10,10,8,10,7,-9,7,9,7,9,7,8,7,8,-10,-7,9)) 

最後,我想有列出每個條約的數據幀只有一次,它的「prom.demo」列的價值和一列包含了每個條約締約方的「政體」價值中最大和最小之間的差異(大多數條約只有兩個締約方,但是一些有51)。 是否有任何R命令可以讓我進行699次計算?

+0

我沒有得到最後的併發症。 'scode1'有時是用逗號分隔的一串國家代碼?在那種情況下'scode2'去了哪裏?或者它完全是一個不同的數據框架? – Spacedman 2014-11-04 15:40:25

+0

此外,我不太明白「目前,這個」差異「 - 價值的標誌不一定在所有成本的價值相同」 – Spacedman 2014-11-04 15:42:57

+0

此外,您的樣本數據是無用的,因爲沒有的條約在政治數據中具有匹配的scode/year記錄。請嘗試通過提供可行的數據集爲答覆者提供便利。例如,我花了10分鐘將純文本轉換爲數據框。 – Spacedman 2014-11-04 16:12:14

回答

1

使用dplyrscodeyear隨後通過Treaty分組,然後制定出最小和最大polity之間的差異及其聯接:

require(dplyr) 
left_join(treaties, Polity, c("scode","year")) %>% group_by(Treaty) %>% summarise(PolityDiff=max(polity,na.rm=TRUE)-min(polity,na.rm=TRUE)) 
Source: local data frame [8 x 2] 

        Treaty PolityDiff 
1 albania macedonia 2002   2 
2 albania moldova 2003   1 
3 albania romania 2003   1 
4  brazil uruguay 1986   2 
5 hungary slovenia 1994   0 
6 nicaragua taiwan 2006   2 
7 Treaty of Izmir 1977   NA 
8 ukraine uzbekistan 1994   16 

的NA的情況下,你沒有任何做(伊茲密爾的條約是1977年的IRN/TUR/PAK,這些都沒有在政體數據中)。

需要注意的是,如果你想NA如果參與國中的任何一個不在政體的數據,使用:

left_join(treaties, Polity, c("scode","year")) %>% group_by(Treaty) %>% summarise(PolityDiff=max(polity)-min(polity)) 

這給:

    Treaty PolityDiff 
1 albania macedonia 2002   2 
2 albania moldova 2003   1 
3 albania romania 2003   1 
4  brazil uruguay 1986   2 
5 hungary slovenia 1994   NA 
6 nicaragua taiwan 2006   2 
7 Treaty of Izmir 1977   NA 
8 ukraine uzbekistan 1994   16 

因爲斯洛文尼亞被編碼爲政治中的SLV,但條約中有SLO - 錯誤?無論如何,政治體系沒有SLO/1994,因此條約在這個變體中作爲NA返回。它在我的第一個例子中返回零,因爲NA得到降低,政治差異是一個數字與它本身之間的差異...

+0

是的,SLO確實是一個錯字,國家代碼是SLV。非常感謝你。 – Mackendrick 2014-11-05 15:50:15