我有一个数据框,包括我工作的3个重要变量。变量是CountryName,year和Idealpoint。我想要做的是找出美国和某一年中任何一个国家之间理想点的差异。因此,例如,我想计算1993年美国和克罗地亚之间理想点的差异。我如何将美国年度理想点分组并从中减去所有其他国家的数据?
这是数据的样子
year Idealpoint CountryName
1 1991 2.98 United States of America
2 1992 3.00 United States of America
3 1993 2.97 United States of America
4 1994 3.00 United States of America
5 1995 3.11 United States of America
6 1996 3.12 United States of America
7 1997 2.99 United States of America
8 1998 2.72 United States of America
9 1999 2.51 United States of America
10 2000 2.56 United States of America
还有其他行,有不同的国家名称,如克罗地亚,瑞典等...
我尝试创建仅美国理想点数的子集向量,并从上述数据的子集中减去该数据而不使用美国数据。问题是,并非每个国家每年都有一个理想的点,因为在某些情况下,这个国家并不存在。因此,US理想点矢量的长度不是非US矢量长度的倍数。我该如何解决这个问题?
理想情况下,我希望看到的是(仅仅是一个例子,而不是我期望的实际结果)
year Idealpoint CountryName DifIdealUS
1 1991 2.98 Latvia 1
2 1992 3.00 Latvia 1.2
3 1993 2.97 Latvia 1.3
4 1994 3.00 Latvia 1
5 1995 3.11 Latvia 1.1
6 1996 3.12 Latvia 1.2
7 1997 2.99 Latvia 1.3
8 1998 2.72 Latvia 1.6
9 1999 2.51 Latvia 1.7
10 2000 2.56 Latvia 1.6
我们可以做的
library(dplyr)
df1 %>%
group_by(year) %>%
mutate(DifIdealUS = Idealpoint -
Idealpoint[CountryName == 'United States of America'])
或者如果“年份”值在所有“CountryName”中相同且位于order
中,则为另一个选项
df1$DifIdealUS <- df1$Idealpoint -
df1$Idealpoint[df1$CountryName == "United States of America"]
更有效的方法是将美国数据提取到一个新的数据框中,然后在一年之内将其加入df1
。然后,您可以使用上面的mutate函数创建一个新列,而无需逐个调用 - 只需从Idealpoint列中减去USA数据。