Массаж данных для получения необходимых данных - PullRequest
0 голосов
/ 05 октября 2018

Мой файл данных содержит расходы по месяцам.Эти затраты относятся к некоторым категориям затрат.Я пытался отфильтровать некоторые затраты в этом столбце (несколько записей для одного сегмента затрат) и суммировать эти затраты по месяцам для этого сегмента затрат.Затем я должен сложить эти затраты в другую корзину затрат.

например, несколько записей для SWB, обучения и т. Д. Нужно суммировать эти несколько значений в месяц, а затем суммировать их в другой сегмент затрат, например, персонал.

Ниже приведен код:

list <- c("SWB", "Travel", "Training", "Relocation", "Contract Labor")
> for(i in seq_along(list))
+ {
+ temp <- dump %>% select(Line.Item.L1, Jan:Aug) %>% filter(Line.Item.L1 == a[[i]])
+ temp %>% select(Jan:Aug) %>% colSums(na.rm=TRUE) -> a[[i]]
+ }

Произошла ошибка:

Ошибка в списке [[i]] <- temp%>% select (Янв: Авг)%>% colSums (na.rm = TRUE):
больше элементов, чем предусмотрено для замены

Затем я использовал:

 d <- data.frame(a=rep(1,10), b=rep(1,10), c=rep(1,10), d=rep(1,10), e=rep(1,10))
> for(i in seq_along(list))
+ {
+ j=1
+ d[j,] = c(a,b,c,d,e)
+ temp <- dump %>% select(Line.Item.L1, Jan:Dec) %>% filter(Line.Item.L1 == list[[i]])
+ temp %>% select(Jan:Dec) %>% colSums(na.rm=TRUE) -> d[j,]
+ j=j+1
+ }

Это показывает, что: e не определены.

Пожалуйста, помогите мне написать этот код

1 Ответ

0 голосов
/ 05 октября 2018

Почему бы вам не использовать collect () из tidyr, чтобы собрать столбцы вашего месяца в один столбец с именем month, а затем сгруппировать их по ним для расчета ваших сумм?

Ваш пример новых сегментов - этонемного мутновато, но вы могли бы сделать что-то вроде этого:

list %>%
   mutate(new_bucket = ifelse(Line.Item.L1 == bucket_value,'bucket1','bucket2') %>%
   gather(key = month, value = cost, Jan:Aug) %>%
   group_by(new_bucket,month) %>%
   summarize(total_costs = sum(cost)

В любом случае, я бы сначала назначил новый контейнер в отдельном столбце (если необходимо, сделайте это в цикле for), а затем вычислил остатокочень быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...