【问题标题】:How to subtract subset of column from rest of column如何从列的其余部分中减去列的子集
【发布时间】:2019-05-01 18:22:12
【问题描述】:

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


    【解决方案1】:

    我们可以的

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

    如果“年份”值在所有“国家名称”中都相同并且位于 order 中,则另一种选择,则

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-25
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多