Можно ли создать строку, содержащую итоги для одних столбцов и средние для других? - PullRequest
1 голос
/ 02 мая 2019

У меня есть фрейм данных, относящийся к данным временного ряда, в которых некоторые столбцы представляют суммы, а некоторые столбцы представляют проценты.Я хочу строку, которая суммирует каждый столбец, но, очевидно, для меня не особенно полезно суммировать столбцы, содержащие проценты.

Вот пример кадра данных:

date<-c("2019-04-27", "2019-04-28", "2019-05-01")
name<-c("sam", "sam", "sam")
amt1<-c(3,6,2)
amt2<-c(4,2,7)
percent1<-c(0.25, 0.7, 0.42)
amt3<-c(13,7,4)
percent2<-c(0.54, 0.48, 0.77)

df<-data.frame(date,name, amt1, amt2, percent1, amt3, percent2)
df$date<-as.Date(df$date)

Мне нужна строка, содержащая:

-суммы для столбцов amt1, amt2, amt3

-средство для столбцов процентов1, процентов2.

У кого-нибудь есть идеи, как этого добиться?

1 Ответ

0 голосов
/ 02 мая 2019

Один из вариантов - выбрать столбцы numeric (select_if), а затем с помощью mutate_if получить mean из тех столбцов, значения которых all меньше 1, на следующем шаге, выполните sum столбцов, где значение any больше 1. (Отказ от ответственности - OP сказал, что нет шаблонов или индексов имен столбцов, и это одна из возможных логик, заданных OP)

library(tidyverse)
df %>% 
  select_if(is.numeric) %>%
  mutate_if(~ all(.x < 1), mean) %>%
  mutate_if(~ any(.x > 1), sum) %>% 
  slice(1) %>%
  bind_rows(df, .) %>%
  mutate(name = replace(as.character(name), n(), "Other"))
#         date  name amt1 amt2  percent1 amt3  percent2
#1 2019-04-27   sam    3    4 0.2500000   13 0.5400000
#2 2019-04-28   sam    6    2 0.7000000    7 0.4800000
#3 2019-05-01   sam    2    7 0.4200000    4 0.7700000
#4       <NA> Other   11   13 0.4566667   24 0.5966667
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...