剪切和排序创建的数据

时间:2019-05-07 11:16:12

标签: r

我有这个数据框。

df <- read.table(text="
  amount      nr      date
  50          1       2017-01-01
  150         1       2017-01-03
  1500        2       2017-01-04
  1450        2       2017-01-04
  1250        2       2017-01-04
  950         1       2017-02-05
  120         3       2017-02-06
  300         3       2017-04-06
  ", header=TRUE)

我想将数量列减少100s并由此创建新列。我用过

df %>% mutate(
    bin_nr = cut(amount, breaks = seq(50, 1500, 100))
  )

但是由于某些原因,我不仅得到(50,150],而且得到<NA>(如果金额为1500或50)和(1.15e+03,1.25e+03]

所以问题是 1)如何使(50,150]的金额为50和4位数字(1400,1500] 2)如何按值对这个新创建的bin_nr列进行排序。换句话说,能够将值从最小(最大)到最大(最小)排序。

2 个答案:

答案 0 :(得分:2)

要避免使用NA值,请在breaks的开头/结尾分别用-InfInf指定seq(如果有外部值范围),并确保将dig.lab从默认设置更改为不使用科学计数法打印

library(dplyr)
options(scipen = 999)
df %>%
   mutate(bin_nr = cut(amount, breaks = c(-Inf, 
        seq(50, 1500, 100), Inf), dig.lab = 5))

答案 1 :(得分:2)

您可以使用剪切功能的include.lowest = T选项,将1550年出生的最高胎龄添加到1500。它与:或多或少是重复的:

cut() - include lowest values