“剪切”功能如何设置间隔?

问题描述 投票:0回答:2

我是 R 新手,正在尝试设置频率表的组成部分(频率、累积频率、相对频率和累积百分比)。我得到了一组 24 个数字(范围从 64 到 100),以将其分组为宽度为 10 的类别。这就是我遇到的问题。我想创建 5 个类别,每个类别有 10 个数字(60-69、70-79、80-89、90-99、100-109)。当我在 R 中按 10 从 60 到 109 排序时,它会创建 11 个类别(60-70、70-80、80-90 等)。如果我要求 R 执行相同的任务,但从 59 到 109,乘以 10,它会为我提供其余代码的正确值,但我的类别在数字上不准确。我是否需要使用不同的函数来获得正确的结果,或者有没有办法让我将 R 设置为将 60-69 计为 10,就像询问 length(60-69): >10 时一样?

给定 24 个数据点,我将每个数字输入到一个向量中。我将向量转换为具有 1 列的数据框,并将向量分配给该列。我尝试使用 R 中的序列命令将 24 个数字的数据帧分类为类别 60-69 到 100-109,增量为 10,使用以下代码:

interval_table <- table(cut(data_framex$col1, seq(60, 109, 10)

输出给了我:

(60,70]  (70,80]  (80,90] (90,100] 
      3        9        8        4

当我询问 R 中 60:70 的长度时,它告诉我长度=11,所以我假设它以某种方式从 61 而不是 60 开始计数,即使该类别包含 60 到 70 之间的所有数字。

如果我将顺序设置为以下,它会给出正确的计数,但类别不正确。

interval_table <- table(cut(data_framex$col1, seq(59, 109, 10)

输出:

 (59,69]  (69,79]  (79,89]  (89,99] (99,109] 
       2        7       11        3        1 

请参阅下面的完整代码。由于我是新人,我可能认为这是完全错误的,应该使用不同的代码,但我无法通过搜索结果找到答案。我感谢您的帮助!

x <- c(66, 80, 89, 71, 80, 88, 82, 98, 83, 100, 72, 70, 64, 75, 79, 82, 88, 71, 85, 94, 93, 80, 77, 83)
data_framex <- data.frame(col1 = x)
interval_table <- table(cut(data_framex$col1, seq(60, 109, 10)))
interval_table

Output:
 (60,70]  (70,80]  (80,90] (90,100] 
       3        9        8        4

Desired Output:
 (60,69]  (70,79]  (80,89]  (90,99] (100,109] 
       2        7       11        3        1 
r sequence frequency-distribution
2个回答
1
投票

您可以在 cut 函数中使用正确的参数并将其设置为 FALSE。 这将使间隔左闭。以下是修改代码的方法:

#for example
# your data
x <- c(66, 80, 89, 71, 80, 88, 82, 98, 83, 100, 72, 70, 64, 75, 79, 82, 88, 71, 85, 94, 93, 80, 77, 83)

# Create a data frame
data_framex <- data.frame(col1 = x)

# Create the intervals with left-closed intervals
interval_table <- table(cut(data_framex$col1, seq(60, 109, 10), right = FALSE))

# Print the result
print(interval_table)

1
投票

请注意,所需的输出名称不正确,因为它排除了下限并包含上限。也就是说 (a, b] 表示< x <= b so a is never included. See 标准音程表示法,了解有关表示法的更多信息。要解决此问题,请使用 [a,b],如下所示。

tab <- table(x %/% 10)
names(tab) <- sprintf("[%s0,%s9]", names(tab), names(tab))
tab

##   [60,69]   [70,79]   [80,89]   [90,99] [100,109] 
##         2         7        11         3         1 

或者只需删除方括号/圆括号

names(tab) <- sprintf("%s0-%s9", names(tab), names(tab))
tab

##   60-69   70-79   80-89   90-99 100-109 
##       2       7      11       3       1 

注意

x <- c(66, 80, 89, 71, 80, 88, 82, 98, 83, 100, 72, 70, 64, 75, 79, 82, 
       88, 71, 85, 94, 93, 80, 77, 83)
© www.soinside.com 2019 - 2024. All rights reserved.