如何从列的其余部分中减去列的子集

问题描述 投票:2回答:2

我有一个数据框,包括我工作的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

r
2个回答
4
投票

我们可以做的

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"]

1
投票

更有效的方法是将美国数据提取到一个新的数据框中,然后在一年之内将其加入df1。然后,您可以使用上面的mutate函数创建一个新列,而无需逐个调用 - 只需从Idealpoint列中减去USA数据。

© www.soinside.com 2019 - 2024. All rights reserved.