R切,排除无限

时间:2016-10-04 15:20:33

标签: r nan

我试图为具有剪切功能的比率创建类别。我需要为无限或NaN的值创建一个不同的类别。

示例表:

set.seed(1)
tbl_a<-data.frame(a=round(runif(200, -1,1)*10,0)/10, b=rep(seq(0,9), 10))
tbl_a$ratio=tbl_a$a/tbl_a$b

我的尝试是:

tbl_a$ratio_G<-ifelse(tbl_a$ratio %in% c(Inf, -Inf,NaN), 'xx',
          cut(tbl_a$ratio, breaks=c(0,0.1,0.2,0.27,0.35,0.54,0.90,0.99,Inf), right=FALSE))

但是我没有使用breacks来获得等级值。

如何获得原始休息时间以及&#39; xx&#39;对于NaN还是Infinite?感谢。

EDITION:我在应用了akrun的建议后对结果进行分组时发现了另一个问题。所以我更改了休息时间以显示案例:

tbl_a$ratio_G<-ifelse(tbl_a$ratio %in% c(Inf, -Inf,NaN), 'xx',
          as.character(cut(tbl_a$ratio, breaks=c(-Inf,-1,-0.1,0.1,0.2,0.5,0.99,Inf), right=FALSE)))


library (dplyr)
tbl_a%>%group_by(ratio_G)%>%summarise(cant=n())

所以,我得到了:

    ratio_G  cant
       (chr) (int)
  [-0.1,0.1)   98
  [-1,-0.1)    40
  [0.1,0.2)    22
  [0.2,0.5)    15
 [0.5,0.99)     5
         xx    20

但这不是有序的。我应该得到:

ratio_G cant
(chr)   (int)
[-1,-0.1)   40
[-0.1,0.1)  98
[0.1,0.2)   22
[0.2,0.5)   15
[0.5,0.99)  5
xx  20

我认为这是因为标签是字符。这是主要问题的解决方案所产生的问题,所以我想这仍然是同一个问题。

0 个答案:

没有答案