2014-11-04 146 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