У меня есть пример данных:
set.seed(25)
xx <- data.table(
year = 2015,
values = iris$Sepal.Length,
score = sample(1:8, nrow(iris), replace = TRUE))
Фактические данные содержат много лет и строк. Я хотел сгруппировать столбец values
, используя функцию cut()
в base
R
, но результат отличается от результата, сгенерированного в сводной таблице LibreOffice Cal c (даже в MS Office Excel). Это то, что я сделал до сих пор:
brks <- seq(0, ceiling(max(xx$values)), 0.5)
xx[, bins := cut(values, brks, ordered_result = TRUE)]
xx_binned <- dcast(xx, bins ~ year, length, value.var = "values")
xx_binned <- melt(xx_binned, id.vars = "bins", value.name = "value")
Я начал с 0
, так что это будет согласованно, если я буду использовать другие данные. В электронной таблице я также начал с 0
как начальный номер.
Результат приведенных выше кодов таков:
bins variable value
1 (4,4.5] 2015 5
2 (4.5,5] 2015 27
3 (5,5.5] 2015 27
4 (5.5,6] 2015 30
5 (6,6.5] 2015 31
6 (6.5,7] 2015 18
7 (7,7.5] 2015 6
8 (7.5,8] 2015 6
Это результат LibreOffice Cal c:
values 2015
4-4.5 15
4.5-5 106
5-5.5 100
5.5-6 142
6-6.5 148
6.5-7 95
7-7.5 25
7.5-8 27
Как сделать так же? Я пишу функцию, конвертирующую инструменты электронной таблицы в функцию R, и хочу, чтобы она была такой же, как в выходных данных электронной таблицы.
Спасибо.