Объединение столбцов таблицы в зависимости от возраста

У меня есть таблица в R, которая выглядит следующим образом (ниже это просто пример):

|       | 15 | 17 | 18 | 22 | 25 | 26 | 27 | 29 | 
|-------|----|----|----|----|----|----|----|----|
| 10000 | 1  | 2  | 1  | 2  | 4  | 3  | 5  | 2  |
| 20000 | 0  | 0  | 0  | 0  | 0  | 0  | 0  | 0  |
| 30000 | 0  | 0  | 0  | 0  | 0  | 0  | 0  | 0  |
| 40000 | 0  | 0  | 0  | 1  | 2  | 3  | 6  | 3  |
| 50000 | 0  | 0  | 0  | 0  | 0  | 0  | 1  | 1  |
| 60000 | 0  | 0  | 0  | 0  | 0  | 0  | 0  | 0  |

Строки - это уровни дохода, а столбцы - уровни возраста. По сути, я создаю эту таблицу, чтобы узнать, связан ли возраст с доходом с помощью критерия хи-квадрат. Числа в таблице являются числами случаев, например, в моем наборе данных 2 человека в возрасте 17 лет с доходом 10000.

И возраст, и уровень дохода типа "num" в R так непрерывны.

Я хочу по существу объединить столбцы по возрасту, чтобы получить таблицу со всеми, кто имеет доход в 10 тысяч, и в возрасте от 15 до 25 лет, в возрасте от 25 до 35 лет и т. Д., Поэтому я получаю гораздо меньше столбцов.

Обратите внимание, что colnames(tbl) = "15","17", "18", а не "Age" - я не определил всеобъемлющее имя для своих столбцов и строк.

Я отмечаю, что этот ответ делает нечто похожее, но не уверен, как его применить, поскольку у меня нет названия для моих столбцов, например, "mpg" (в случае ссылки).

Есть идеи?

1 ответ

Сделал мою собственную матрицу здесь, но должен работать на df's aswell.

mat <- matrix(sample(1:10,8500,replace = TRUE),ncol=85)
colnames(mat) <- 15:99
levs <- cut(as.numeric(colnames(mat)),seq(15,105,10),right = FALSE)
res <- sapply(as.character(unique(levs)),function(x)rowSums(mat[,levs==x]))

Редактировать: Если вы хотите использовать те же имена, что и в mat, но считать в соответствии с категорией, дополнительно выполните:

res <- res[,levs] # expands the res df to one category count col pr. original col in mat.
colnames(res) <- colnames(mat) # renames cols to reflect input matrix mat.
Другие вопросы по тегам