Как добавить в таблицу данных столбец, в котором показана сумма значений нескольких других столбцов? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть 8 возрастных категорий, каждая из которых имеет свой собственный столбец (например, резидент_удержатель_5, резидент______12 и т. Д.). В каждом столбце указано значение от 0 до 3 для количества людей в этом домохозяйстве в этой конкретной возрастной категории.Я хочу, чтобы это был новый столбец, с помощью которого я могу построить общее распределение возраста моего населения на гистограмме, поэтому я подумал о столбце, который имеет 66 строк Residents_under_5, 32 строки Residents_6_to_12 и т. Д., Для суммы этихкатегории.

Мои данные выглядят так:

a b c d 
0 3 2 1
1 3 2 1
2 0 2 1
3 1 0 0

Мне нужен столбец e, в котором показано:

e
a
a
a
a
b
b
b
b
b
c
c
c
d
d
d

Общее количество вхождений вдругие столбцы.

Я пытался объявить новые столбцы с sum(residents_under_5), но это даст мне 1 строку с 66 (как сумму этой категории). Я не могу построить гистограмму с таким столбцомЯ надеюсь, что кто-то может понять это!

Это dput () соответствующих столбцов

residents_under_5 = c(0, 0, 0, 1, 1, 2), 
residents_6_to_12 = c(0, 0, 0, 0, 0, 0), 
        residents_13_to_18 = c(0, 0, 0, 0, 0, 0), 
residents_19_to_24 = c(0, 
        0, 0, 0, 0, 0), 
residents_25_to_34 = c(0, 1, 2, 0, 1, 0), 
       residents_35_to_49 = c(0, 0, 0, 2, 1, 2), 
residents_50_to_64 = c(0, 
        1, 0, 0, 0, 0), 
residents_65_and_older = c(2, 0, 0, 0, 1, 
        0)

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Опция в tidyverse будет заключаться в получении sum всех столбцов с summarise_all, gather в формате 'long' и uncount столбце 'value'

library(tidyverse)
df1 %>% 
   summarise_all(sum) %>%
   gather %>% 
   uncount(value)

данные

df1 <- structure(list(a = 0:3, b = c(3L, 3L, 0L, 1L), c = c(2L, 2L, 
2L, 0L), d = c(1L, 1L, 1L, 0L)), class = "data.frame", row.names = c(NA, 
  -4L))
1 голос
/ 27 мая 2019

Вы можете unlist данных и рассчитать частоты, используя table, а затем повторить letters, используя rep.

rep(letters[seq_len(ncol(df))], colSums(df))

data

df <- data.frame(residents_under_5 = c(0, 0, 0, 1, 1, 2), 
                 residents_6_to_12 = c(0, 0, 0, 0, 0, 0), 
                 residents_13_to_18 = c(0, 0, 0, 0, 0, 0), 
                 residents_19_to_24 = c(0, 0, 0, 0, 0, 0), 
                 residents_25_to_34 = c(0, 1, 2, 0, 1, 0), 
                 residents_35_to_49 = c(0, 0, 0, 2, 1, 2), 
                 residents_50_to_64 = c(0, 1, 0, 0, 0, 0), 
                 residents_65_and_older = c(2, 0, 0, 0, 1, 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...