在R studio中计算频率

问题描述 投票:-1回答:2

我是使用R的新手,并且正在做一些练习。特别是,我想知道是否有任何方法可以计算X的绝对频率,但不使用函数table(x)

换句话说,我想获得“ table(X)”给出的相同输出,但是不使用此函数。有可能吗?

r frequency
2个回答
0
投票

如果出于某种原因必须避免使用最直接的方法,即使用table函数,则有多种计算频率的方法(例如,参见注释)。一种替代方法是通过定义for循环:

样本数据

set.seed(123)
dt <- sample(LETTERS[1:5], 100, replace = T)

要计算频率,您首先需要设置一个空矢量来填充for循环的结果:

f <- c()

然后运行for循环本身,即循环遍历dt中的唯一元素,然后sum将它们逐个索引:

for(i in unique(dt)){
  f[i] <- sum(dt== i)
}

通过这种方式获得此频率列表:

f
 B  D  C  E  A 
20 22 21 18 19

0
投票

创建没有base::table()的频率表的一种方法是使用tables::tabular()。这是一个示例,其中我们为mtcars数据帧中的几个离散变量创建表。这种方法的好处是它除了提供频率外还提供了百分比。

library(tables)
tabular((Factor(am) + Factor(carb))~(n=1 + Percent("col")),data = mtcars)

...和输出:

       n          
        All Percent
 am   0 19  59.375 
      1 13  40.625 
 carb 1  7  21.875 
      2 10  31.250 
      3  3   9.375 
      4 10  31.250 
      6  1   3.125 
      8  1   3.125 
> 

另一种方法是使用dyplrtidyr。我们将mtcars数据转换为窄格式,并计算三个分类变量的频率:cylcarbam

library(dplyr) 
library(tidyr)
mtcars %>% mutate(model = rownames(.)) %>% 
     group_by(model) %>% select(model,cyl,carb,am) %>% 
     pivot_longer(.,-model,names_to = "variable",values_to = "value") %>% 
     mutate(count = 1) %>% group_by(variable,value) %>%
     summarise(freq = sum(count)) 

...和输出:

   variable value  freq
   <chr>    <dbl> <dbl>
 1 am           0    19
 2 am           1    13
 3 carb         1     7
 4 carb         2    10
 5 carb         3     3
 6 carb         4    10
 7 carb         6     1
 8 carb         8     1
 9 cyl          4    11
10 cyl          6     7
11 cyl          8    14
© www.soinside.com 2019 - 2024. All rights reserved.