Как вычесть подмножество столбца из остатка столбца - PullRequest
2 голосов
/ 01 мая 2019

У меня есть фрейм данных, который включает в себя 3 важные переменные для моей работы.Переменными являются CountryName, год и 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

Существуют другие строки с разными названиями стран, такие как Хорватия, Швеция и т. д. *

Я попытался создать вектор подмножества только из числа идеальных точек США и вычесть его изподмножество вышеуказанных данных без данных США.Проблема в том, что не у каждой страны есть идеальная точка для каждого года, потому что в некоторых случаях страна не существует.Таким образом, длина вектора идеальной точки США не кратна длине неамериканского вектора.Как мне обойти это?

В идеале, то, что я хотел бы видеть, это что-то вроде (просто пример, а не то, что я ожидаю, чтобы быть фактическими результатами)

    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

Ответы [ 2 ]

4 голосов
/ 01 мая 2019

Мы можем сделать

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

Или другой вариант, если значения 'year' одинаковы для всех 'CountryName' и находятся в order, тогда

df1$DifIdealUS <- df1$Idealpoint - 
        df1$Idealpoint[df1$CountryName == "United States of America"]
1 голос
/ 01 мая 2019

Более надежным способом сделать это может быть извлечение данных США в новый фрейм данных, а затем присоединение к нему до df1 по годам.Затем вы можете создать новый столбец с вышеприведенной функцией mutate без группового вызова - просто вычитая данные США из столбца Idealpoint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...