【问题标题】:How to get the frequency of specific values?如何获得特定值的频率?
【发布时间】:2020-02-21 20:18:43
【问题描述】:

我有一个包含 1000 行和 10000 列的大型数据集。我用以下代码给出一个简短的例子:

V1 = c(1,2,1,1,NA,1,0,2,2,1,0)
V2 = c(0,2,NA,2,1,2,0,1,NA,0,0)
V3 = c(3,1,1,1,NA,1,0,2,2,1,2)
V4 = c(1,2,NA,1,0,2,0,2,NA,2,0)
datos =data.frame(cbind(V1,V2,V3,V4))

我的每一列都有值 =“0”、“1”或“2”。我需要得到每列中“0”和“1”的频率。请注意,数据集也有“NA”值,我不必考虑估计频率。

例如对于 V1,“0”的频率是 = 2/10 = 0,2,而“1”的频率是 = 5/10 = 0,5。所以总和是 0,2 + 0,5 = 0,7。

我认为apply(datos, 2, x) 可以提供帮助,但我不确定function (x) 怎么可能。

有人知道解决这个问题的方法吗?

谢谢

【问题讨论】:

    标签: r frequency


    【解决方案1】:

    我们可以将replace除0或1以外的值改为NA,用table得到频率,用prop.table转换成比例

    sapply(datos, function(x) prop.table(table(replace(x, !x %in% 0:1, NA))))
    

    如果我们需要考虑整个长度,即原始数据集的行数

    sapply(datos, function(x) table(replace(x, !x %in% 0:1, NA)))/nrow(datos)
    

    【讨论】:

      【解决方案2】:

      dplyrpurrr 选项可以是:

      map(.x = list(zeros = 0, ones = 1), 
          ~ summarise_all(datos, ~ sum(. == !!.x, na.rm = TRUE)/length(na.omit(.))))
      
      $zeros
         V1        V2  V3        V4
      1 0.2 0.4444444 0.1 0.3333333
      
      $ones
         V1        V2  V3        V4
      1 0.5 0.2222222 0.5 0.2222222
      

      如果您还想要两者的组合值:

      map(.x = list(zeros = 0, ones = 1), 
          ~ summarise_all(datos, ~ sum(. == !!.x, na.rm = TRUE)/length(na.omit(.)))) %>%
       reduce(`+`)
      
         V1        V2  V3        V4
      1 0.7 0.6666667 0.6 0.5555556
      

      如果您正在寻找组合值,或者仅使用 dplyr

      datos %>%
       summarise_all(~ sum(. %in% c(0, 1), na.rm = TRUE)/length(na.omit(.)))
      

      【讨论】:

        【解决方案3】:

        这是一个基本的 R 解决方案

        res <- Map(function(x) sum(head(prop.table(table(na.omit(x))),2)),datos)
        

        这样

        > res
        $V1
        [1] 0.7
        
        $V2
        [1] 0.6666667
        
        $V3
        [1] 0.6
        
        $V4
        [1] 0.5555556
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-20
          相关资源
          最近更新 更多