我有这个数据框。
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列进行排序。换句话说,能够将值从最小(最大)到最大(最小)排序。
答案 0 :(得分:2)
要避免使用NA
值,请在breaks
的开头/结尾分别用-Inf
和Inf
指定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。它与:或多或少是重复的: