Как вычислить индекс в r? - PullRequest
1 голос
/ 26 апреля 2019

Я впервые задаю вопрос в этом великом сообществе. Я пытаюсь рассчитать индекс для data.frame, показать их по районам или районам и сюжет. Какой код подходит больше всего?

Вот пример набора данных, который у меня есть. albo, aegy = виды комаров, дом = предполагаемый дом, рассчитывается индекс дома (число положительных домов / количество предполагаемых домов) * 100. положительный дом - дом, в котором был найден по крайней мере один комар (значение! = 0) HI = (7/11) * 100 = 63,63 для общего числа (11 = количество предполагаемых домов и 7 = общее количество положительных домов)


borough neighborhood    concession  albo    aegyp   Total_albo_aegyp
a1  mendong                1         1        5            6
a1  mendong                2         5        2            7
a1  mendong                3         2        1            3
a1  tam tam                4         0        0            0
a2  tam tam                5         4        6            10
a2  obili                  6         0        1             1
a2  obili                  7         0        0             0
a3  acacia                 8         3        7             10
a4  melen                  9         1        1             2
a4  melen                  10        0        5             5
a4  polytech               11        8        0             10

HIcommune <- concessiondata %>% 
  group_by(commune) %>% 
  summarise(
  Mean = mean(concessiondata$total_aedes_albo_aegypti!=0),
  HIY = sum(concessiondata1$total_aedes_albo_aegypti!=0)/length(concessiondata1$total_aedes_albo_aegypti))

  Houseindex_total <- concessiondata1[, Mean := mean(total_aedes_albo_aegypti!=0), by = "commune"]


  ## This is how the results should look like

borough albo HI aegy HI Total_albo_aegyp_HI
a1        75       75         75
a2        33.33    66.66      66.66
a3        100      100        100
a4        66.66    66.66      100

1 Ответ

1 голос
/ 26 апреля 2019

Во-первых, в вашем коде есть пара общих проблем кодирования / синтаксиса.

  1. Я бы не советовал смешивать синтаксис dplyr и data.table.
  2. Вам не нужно $ индексировать столбцы внутри dplyr глаголов.

Я бы порекомендовал ознакомиться с одним из многих свободно доступных tidyverse учебных пособий, чтобы изучить основы преобразования / манипулирования данными с помощью dplyr / tidyr.

Кроме того, следующий код воспроизводит ваш ожидаемый результат

calc_index <- function(x) sum(x != 0) / length(x) * 100

library(dplyr)
df %>%
    group_by(borough) %>%
    summarise(
        albo_HI = calc_index(albo),
        aegyp_HI = calc_index(aegyp),
        Total_albo_aegyp = calc_index(Total_albo_aegyp))
## A tibble: 4 x 4
#  borough albo_HI aegyp_HI Total_albo_aegyp
#  <fct>     <dbl>    <dbl>            <dbl>
#1 a1         75       75               75
#2 a2         33.3     66.7             66.7
#3 a3        100      100              100
#4 a4         66.7     66.7            100

Или вы можете использовать summarise_all

df %>%
    group_by(borough) %>%
    select(-neighborhood, -concession) %>%
    summarise_all(~calc_index(.x))
## A tibble: 4 x 4
#  borough  albo aegyp Total_albo_aegyp
#  <fct>   <dbl> <dbl>            <dbl>
#1 a1       75    75               75
#2 a2       33.3  66.7             66.7
#3 a3      100   100              100
#4 a4       66.7  66.7            100
...