Как найти разницу соотношений в нескольких столбцах, используя R - PullRequest
0 голосов
/ 11 октября 2018

У меня есть фрейм данных с 4 разными годами со значениями.Мне нужно выяснить, как эти значения меняются во все годы, т. Е. Какой город меняет свое значение слишком часто, что является наименьшим.

City     Ratio1     Ratio2     Ratio3     Ratio4
A        1.0177722  1.0173251  1.0133026  1.0140027
B        1.0132619  1.0122653  1.0128473  1.0111068
C        1.0689484  1.0640355  1.0625305  1.0544790

..... other 1000 entries

Я пытался сделать это по разнице, но не повезло.Вопрос в том, какое соотношение городов изменилось больше всего между соотношением 1 к отношению 4, а какое меньше всего изменилось.Я пытался использовать функцию mutate для вычисления дисперсии, но она выдает мне предупреждение:

DF<- DF%>% mutate(vari = var(Ratio1:Ratio4,na.rm = T))

Warning messages:
1: In POP_2013_ratio:POP_2016_ratio :
  numerical expression has 439 elements: only the first used
2: In POP_2013_ratio:POP_2016_ratio :
  numerical expression has 439 elements: only the first used

1 Ответ

0 голосов
/ 11 октября 2018
В пакете data.table

R есть довольно удобный способ создания новых столбцов на основе существующих:

dt <- data.table(City = c("A", "B", "C"),
                 Ratio1 = c(1.0177722, 1.0132619, 1.0689484),
                 Ratio2 = c(1.0173251, 1.0122653, 1.0640355), 
                 Ratio3 = c(1.0133026, 1.0128473, 1.0625305), 
                 Ratio4 = c(1.0140027,1.0111068, 1.0544790))
>dt 
   City   Ratio1   Ratio2   Ratio3   Ratio4
1:    A 1.017772 1.017325 1.013303 1.014003
2:    B 1.013262 1.012265 1.012847 1.011107
3:    C 1.068948 1.064035 1.062531 1.054479

Вы можете поиграться с некоторыми функциями и посмотреть, что вам больше подходит:

 dt[, diff := Ratio4-Ratio1
    ][, abs_diff := abs(Ratio4-Ratio1)
      ][, range:= max(c(Ratio1, Ratio2, Ratio3, Ratio4))-  min(c(Ratio1, Ratio2, Ratio3, Ratio4)), by = City
        ][,variance:=var(c(Ratio1, Ratio2, Ratio3, Ratio4)), by = City]

 >dt

    City   Ratio1   Ratio2   Ratio3   Ratio4       diff  abs_diff     range     variance
 1:    A 1.017772 1.017325 1.013303 1.014003 -0.0037695 0.0037695 0.0044696 5.174612e-06
 2:    B 1.013262 1.012265 1.012847 1.011107 -0.0021551 0.0021551 0.0021551 8.766456e-07
 3:    C 1.068948 1.064035 1.062531 1.054479 -0.0144694 0.0144694 0.0144694 3.609233e-05

Когда вы, наконец, определились с критериями для использования (скажем, дисперсия), вы можете выбрать верхний город, используя:

dt[order(-variance)][1]

>dt
   City   Ratio1   Ratio2   Ratio3   Ratio4       diff  abs_diff     range     variance
1:    C 1.068948 1.064035 1.062531 1.054479 -0.0144694 0.0144694 0.0144694 3.609233e-05
...