不使用base::table()函数计算R studio中的频率
我刚开始使用R,我在做一些练习。特别是,我想知道是否有任何方法可以计算X的绝对频率,但不使用函数不使用base::table()函数计算R studio中的频率,r,frequency,R,Frequency,我刚开始使用R,我在做一些练习。特别是,我想知道是否有任何方法可以计算X的绝对频率,但不使用函数table(X) 换句话说,我希望得到与表(X)相同的输出,但不使用此函数。有可能吗?如果出于某种原因必须避免使用最直接的方法,即使用表函数,则有多种计算频率的方法(例如,请参见注释)。另一种方法是为循环定义一个: f <- c() 样本数据: set.seed(123) dt <- sample(LETTERS[1:5], 100, replace = T) 然后运行for循环本身,
table(X)
换句话说,我希望得到与
表(X)
相同的输出,但不使用此函数。有可能吗?如果出于某种原因必须避免使用最直接的方法,即使用表
函数,则有多种计算频率的方法(例如,请参见注释)。另一种方法是为循环定义一个:
f <- c()
样本数据:
set.seed(123)
dt <- sample(LETTERS[1:5], 100, replace = T)
然后运行for
循环本身,即通过在dt
中的唯一元素上循环和求和
将它们按索引排列:
for(i in unique(dt)){
f[i] <- sum(dt== i)
}
不使用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
>
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
另一种方法是使用dyplr
和tidyr
。我们将把mtcars
数据转换为窄格式,并计算三个分类变量的频率:cyl
、carb
和am
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))
…以及输出:
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
>
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
可变值频率
凌晨一时零一九分
凌晨2时113分
3碳水化合物17
4碳水化合物210
5碳水化合物3
6碳水化合物4 10
7碳水化合物6 1
8碳水化合物8 1
9团4 11
10团6 7
11共青团8 14
summary()
,dplyr::count()
,用于数据。表
dt[,.N,by=group]
所有这些都将提供与表
类似的输出。这是一个很好的答案,但u