Фильтрация наборов данных с двумя условиями для создания функции - PullRequest
0 голосов
/ 05 июля 2018

Это мой набор данных. Есть две категориальные переменные , Deciles (с 10 уровнями, от DC1 до DC10) и Population (с 3 уровнями: SAP, TD6 и SH) .

enter image description here

Гипотетически, каждый дециль (например, DC7) должен иметь три уровня Population (SAP, TD6 и SH), как и в случае.

Однако в некоторых децилях отсутствует один или два уровня Population (см. DC1 и DC2). Важно знать, что SAP присутствует во всех децилях, поэтому TD6 и SH - это те, которые могут отсутствовать.

Теперь я хочу сравнить SAPvsSH, SAPvsTD6 и SHvsTD6, и я написал эту функцию, которая может быть дополнительно отредактирована и исправлена:

diff <- function(x) {
  SAP <- sum(x$mean[x$Population == "SAP"])
  SH  <- sum(x$mean[x$Population == "SH"])
  TD6 <- sum(x$mean[x$Population == "TD6"])

  SAPvsSH   <- (SH*100/SAP)-100
  SAPvsTD6  <- (TD6*100/SAP)-100
  SHvsTD6   <- (TD6*100/SH)-100

  show(SAPvsSH)
  show(SAPvsTD6)
  show(SHvsTD6)
}

Что мне нужно?

  • При сравнении SAPvsSH я хочу суммировать все mean значения SH и mean значения SAP, которые присутствуют только в децилях, где SH имеет данные. Так что в этом случае это должно быть DC7 + DC8 + DC9 + DC10.
  • При сравнении SAPvsTD6, тот же метод, что и раньше с SH.
  • При сравнении SHvsTD6 должны быть включены только децили, в которых данные отображают обе популяции.

Последние три точки находятся в начале функции.

Позже, в функции, мы вычисляем процентную ошибку второго отношения к первой популяции. SAPvsSH рассчитывает процентную ошибку SH в отношении SAP.

Итак, как я могу ввести фильтр выбора децилей в соответствии с наличием в SH и TD6?

1 Ответ

0 голосов
/ 05 июля 2018

Я бы ввел фильтр при расчете процентной ошибки.

Вместо суммирования в начале, мы создаем подмножества mean векторов, которые мы называем их Deciles. Затем, при расчете процентной ошибки, мы подставляем соответствующие векторы, используя intersect их имен (следовательно, их Deciles):

FOO <- function(x){
  SAP <- x$mean[x$Population == "SAP"]
  names(SAP) <- x$Deciles[x$Population == "SAP"]
  SH <- x$mean[x$Population == "SH"]
  names(SH) <- x$Deciles[x$Population == "SH"]
  TD6 <- x$mean[x$Population == "TD6"]
  names(TD6) <- x$Deciles[x$Population == "TD6"]

  SAPvsSH <- sum(SH)*100 / sum(SAP[intersect(names(SAP), names(SH))]) - 100
  SAPvsTD6 <- sum(TD6)*100 / sum(SAP[intersect(names(SAP), names(TD6))]) - 100
  SHvsTD6 <- sum(TD6[intersect(names(SH), names(TD6))])*100 / sum(SH[intersect(names(SH), names(TD6))]) - 100
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...