【问题标题】:How to compute an index in r?如何计算r中的索引?
【发布时间】:2019-04-26 00:32:25
【问题描述】:

这是我第一次在这个伟大的社区提出问题。我正在尝试计算 data.frame 上的索引,按行政区或社区显示它们并绘制。哪个代码最适合?

这是我拥有的数据集的示例。 albo, aegy = 蚊子种类, house = 预期的房屋, 计算的房屋指数为(正面房屋数/预期房屋数)*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

【问题讨论】:

  • 你为什么混合dplyrdata.table语法?另外,请仔细检查您的代码。您的示例数据没有 commune 列。最后,您不需要在summarise 中为$-index 列。总之,这似乎是理解基本dplyr 语法的更多问题。
  • 感谢您的发言。当我在我的代码中删除符号 $ 时,一切都和你提到的一样。

标签: r indexing group-by row


【解决方案1】:

首先,您的代码存在一些一般性的编码/语法问题。

  1. 我建议不要混合使用 dplyrdata.table 语法。
  2. 您不需要在 dplyr 动词中使用 $-index 列。

我建议您熟悉许多免费提供的 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

【讨论】:

  • 这个解决方案要好得多。感谢您向我提供“tidyverse”软件包的建议,因为它允许您在方便时操作数据。
猜你喜欢
  • 2021-12-27
  • 2016-11-11
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多