【问题标题】:how to calculate the proportion of certain observations in each variable in r?如何计算r中每个变量中某些观察值的比例?
【发布时间】:2017-09-27 01:15:29
【问题描述】:

我有数据框(populations1),它由 1100 万行(观察)和 11 列(个人)组成。我的数据框的前几行如下所示:

> head(population1)
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
1  7  3 NA NA 10 NA NA NA NA  NA  NA
2 14 11  7 NA 12  3  4  5 14   3   6
3 13 11  7 NA 11  4 NA  4 13   3   4
4  3 NA  4  5  4 NA NA  6 17  NA   7
5  3 NA  5  5  4 NA NA  7 20  NA   8
6  6 NA  3  6 NA NA NA  5 16  NA  10

对于每个人,我想估计值超过 5 的观察值的比例。在 R 中有没有简单的解决方案?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    这是一个使用sapply 将函数应用于每一列的解决方案。该函数定义为统计有多少个观测值大于 5,然后除以 x 的长度。

    sapply(dt, function(x) sum(x > 5, na.rm = TRUE)/length(x))
           V1        V2        V3        V4        V5        V6        V7        V8        V9       V10 
    0.6666667 0.3333333 0.3333333 0.1666667 0.5000000 0.0000000 0.0000000 0.3333333 0.8333333 0.0000000 
          V11 
    0.6666667
    

    数据

    dt <- read.table(text = "  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
    1  7  3 NA NA 10 NA NA NA NA  NA  NA
                     2 14 11  7 NA 12  3  4  5 14   3   6
                     3 13 11  7 NA 11  4 NA  4 13   3   4
                     4  3 NA  4  5  4 NA NA  6 17  NA   7
                     5  3 NA  5  5  4 NA NA  7 20  NA   8
                     6  6 NA  3  6 NA NA NA  5 16  NA  10",
                     header = TRUE)
    

    【讨论】:

    • 这在较大的 11M x 11 集上运行也很快——据我估计大约需要 1 秒。
    • @Anna1364 也许lapply(datalist, function(dt){sapply(dt, function(x) sum(x &gt; 5, na.rm = TRUE)/length(x))}).
    【解决方案2】:

    这是一个使用tidyverse的选项

    library(dplyr)
    pop1 %>%
         summarise_all(funs(sum(.>5, na.rm = TRUE)/n()))
    #         V1        V2        V3        V4  V5 V6 V7        V8        V9 V10       V11
    #1 0.6666667 0.3333333 0.3333333 0.1666667 0.5  0  0 0.3333333 0.8333333   0 0.6666667
    

    如果我们需要 vector 那么 unlist

    pop1 %>%
        summarise_all(funs(sum(.>5, na.rm = TRUE)/n())) %>%
        unlist(., use.names = FALSE)
    

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2021-11-10
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多