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

R 如何从列的其余部分中减去列的子集,r,R,我有一个数据框架,其中包括我工作中的3个重要变量。变量为CountryName、year和Idealpoint。我想做的是找出美国和任何一个国家在某一年的理想点之间的差异。例如,我想计算1993年美国和克罗地亚之间理想点的差异。我如何将美国年度理想点进行子集划分,并从中减去所有其他国家的数据 下面是数据的样子 year Idealpoint CountryName 1 1991 2.98 United States of Am

我有一个数据框架,其中包括我工作中的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向量长度的倍数。我该怎么做

理想情况下,我希望看到的是(只是一个例子,而不是我期望的实际结果)

我们能做到

library(dplyr)
df1 %>% 
   group_by(year) %>% 
   mutate(DifIdealUS = Idealpoint - 
                       Idealpoint[CountryName == 'United States of America'])

或者另一个选项,如果所有“CountryName”中的“year”值相同且顺序为
,则

df1$DifIdealUS <- df1$Idealpoint - 
        df1$Idealpoint[df1$CountryName == "United States of America"]

df1$defidealus更可靠的方法是将美国数据提取到一个新的数据框中,然后每年将其加入
df1
。然后,您可以使用上面的mutate函数创建一个新列,而无需通过group by调用—只需从Idealpoint列中减去USA数据

df1$DifIdealUS <- df1$Idealpoint - 
        df1$Idealpoint[df1$CountryName == "United States of America"]