在R中将变量切成块

在R中将变量切成块,r,function,dataframe,statistics,categorical-data,R,Function,Dataframe,Statistics,Categorical Data,我试图将我的数据D分为3部分:[0-4]、[5-12]、[13-40]见下图。但我想知道如何准确地定义我的切入点来实现这一点 这是我的数据和R代码: D <- read.csv("https://raw.githubusercontent.com/rnorouzian/m/master/t.csv", h = T) table(cut(D$time, breaks = c(0, 5, 9, 12))) ## what should breaks be? # (0,5] (5,9

我试图将我的数据D分为3部分:[0-4]、[5-12]、[13-40]见下图。但我想知道如何准确地定义我的切入点来实现这一点

这是我的数据和R代码:

D <- read.csv("https://raw.githubusercontent.com/rnorouzian/m/master/t.csv", h = T)


 table(cut(D$time, breaks = c(0, 5, 9, 12))) ## what should breaks be?

 # (0,5]  (5,9] (9,12]  # cuts not how I want the 3 pieces .
 #  228     37     10

符号a,b]表示>a和符号a,b]表示>a和这将生成正确的桶,但间隔符号需要调整。假设所有时间都是整数。可能需要手动调整标签-每次使用右开间隔符号时,请使用闭合间隔符号替换因子标签。使用你最好的字符串“魔术”

就我个人而言,我喜欢确保涵盖所有可能性。也许这个过程的未来数据可能会超过40?我喜欢在我所有的切割中加上+Inf的上限。这可以防止NA进入数据

削减所需要的是一个“仅限整数”选项

F=cutD$time,c0,5,13,40,include.lower=TRUE,right=FALSE 下面的级别是硬编码的,但您可以编写一个循环来翻转所有标签 形式为[m,n到[m,n-1] levelsF[1:2]=c'[0,4]','[5,12]' 通常在得到最终结果之前会有更多的分析,所以在工作接近完成之前,我不会为标签操心太多

这是我的结果

 > table(F) 
 F
 [0,4]  [5,12]  [13,40] 
 319      47      20 

这将生成正确的存储桶,但需要调整间隔符号。假设所有时间都是整数。可能需要手动调整标签-每次使用正确的开放间隔符号时,请使用闭合间隔符号替换因子标签。使用最佳字符串“魔术”

就我个人而言,我喜欢确保所有的可能性都被涵盖。也许这个过程中的未来数据可能会超过40?我喜欢在我的所有切割中加入+Inf的上限。这可以防止NA进入数据

削减所需要的是一个“仅限整数”选项

F=cutD$time,c0,5,13,40,include.lower=TRUE,right=FALSE 下面的级别是硬编码的,但您可以编写一个循环来翻转所有标签 形式为[m,n到[m,n-1] levelsF[1:2]=c'[0,4]','[5,12]' 通常在得到最终结果之前会有更多的分析,所以在工作接近完成之前,我不会为标签操心太多

这是我的结果

 > table(F) 
 F
 [0,4]  [5,12]  [13,40] 
 319      47      20 

R可以将整数与浮点进行比较,如

> 6L >= 8.5
[1] FALSE
因此,可以使用浮动作为剪切中的打断,例如在中

table(cut(D$time, breaks = c(-.5, 4.5, 12.5, 40.5)))
对于整数,这将填充[0-4]、[5-12]、[13-40]的桶定义,而不必考虑方括号和圆括号之间的关系

另一个奇特的选择是围绕你的平均值进行聚类,如

D <- read.csv("https://raw.githubusercontent.com/rnorouzian/m/master/t.csv", h = T)
D$cluster <- kmeans(D$time, center = c(4/2, (5+12)/2, (13+40)/2))$cluster
plot(D$time, rnorm(nrow(D)), col=D$cluster)

R可以将整数与浮点进行比较,如

> 6L >= 8.5
[1] FALSE
因此,可以使用浮动作为剪切中的打断,例如在中

table(cut(D$time, breaks = c(-.5, 4.5, 12.5, 40.5)))
对于整数,这将填充[0-4]、[5-12]、[13-40]的桶定义,而不必考虑方括号和圆括号之间的关系

另一个奇特的选择是围绕你的平均值进行聚类,如

D <- read.csv("https://raw.githubusercontent.com/rnorouzian/m/master/t.csv", h = T)
D$cluster <- kmeans(D$time, center = c(4/2, (5+12)/2, (13+40)/2))$cluster
plot(D$time, rnorm(nrow(D)), col=D$cluster)

您应该正确添加两个传统参数,并在代码中包含.lower

table(cut(D$time, breaks = c(0, 5, 13, 40), right=FALSE, include.lowest = TRUE)) 
如果right=FALSE,则应在左侧关闭间隔,在右侧打开间隔,以便获得所需的结果。include.LOWER=TRUE导致此处的最高中断值40包含在最后一个间隔中。 结果:

反之亦然,你可以写:

table(cut(D$time, breaks = c(0, 4, 12, 40), right=TRUE, include.lowest = TRUE)) 
结果是:

 [0,4]  (4,12] (12,40] 
  319      47      20 
两者都表示您正在寻找的内容:

[0,4]  [5,12] [13,40] 
 319      47      20

您应该正确添加两个传统参数,并在代码中包含.lower

table(cut(D$time, breaks = c(0, 5, 13, 40), right=FALSE, include.lowest = TRUE)) 
如果right=FALSE,则应在左侧关闭间隔,在右侧打开间隔,以便获得所需的结果。include.LOWER=TRUE导致此处的最高中断值40包含在最后一个间隔中。 结果:

反之亦然,你可以写:

table(cut(D$time, breaks = c(0, 4, 12, 40), right=TRUE, include.lowest = TRUE)) 
结果是:

 [0,4]  (4,12] (12,40] 
  319      47      20 
两者都表示您正在寻找的内容:

[0,4]  [5,12] [13,40] 
 319      47      20

在您编写的代码示例中,使用9英寸的分隔符并不能按照您想要的方式切割,而其中没有9英寸。除了多余的9之外,您可以指定问题是什么吗?在您编写的代码示例中,使用9英寸的分隔符并不能按照您想要的方式切割,其中没有9英寸。除了多余的9之外,您可以指定w吗问题是什么?