Среднее значение одного столбца на основе условий (в разных столбцах) - PullRequest
1 голос
/ 16 июня 2020

Сначала код:

library(dplyr)

#Sample Data

df1 = cbind(c(replicate(5, 2015)),
                        c(replicate(5, 1)),
                       c(rnorm(5, 0, 1)),
                       c(replicate(5, 'A')))

df2 = cbind(c(replicate(5, 2015)),
                       c(replicate(5, 2)),
                       c(rnorm(5, 0, 1)),
                       c(replicate(5, 'A')))

df3 = cbind(c(replicate(5, 2016)),
                       c(replicate(5, 1)),
                       c(rnorm(5, 0, 1)),
                       c(replicate(5, 'B')))

df = rbind(df1, df2, df3)

# Code I used    
bs1 = file %>% 
      group_by(V1) %>% 
      group_by(V2) %>% 
      summarise(avg = mean(V3[V4=1])) %>% 
      ungroup()

Формулировка проблемы: я хочу усреднить столбец V3 для каждого V4 и V1. Например, для 2015 года следует усреднить все единицы ниже V3. Точно так же все двойки следует усреднить отдельно. По сути, вместо 5 строк в 2015 году для единиц и пятерок будет только одна (в среднем). Точно так же вместо 5 строк для двоек и пятерок будет только один.

Фактический фрейм данных намного длиннее: 365 V3 записей для каждой из 7 V4 записей каждый год (с 2015 по 2020).

# Desired Output
# Calculation not accurate (just an example of how the output should look like)
> new_df 
V1    V2    V3    V4
2015  1   0.02456  A
2015  2   0.04533  A
2016  1   0.07821  B

Спасибо, Рахул.

PS Не знаю, ясен ли мой вопрос.

1 Ответ

2 голосов
/ 16 июня 2020

Как это?

library(dplyr)
df %>% 
  group_by(V1, V2, V4) %>% 
  summarise(mean_V3 = mean(V3))

# A tibble: 3 x 4
# Groups:   V1, V2 [3]
  V1    V2    V4    mean_V3
  <chr> <chr> <chr>   <dbl>
1 2015  1     A      -0.185
2 2015  2     A      -0.290
3 2016  1     B       0.364

Данные

df1 = cbind(c(replicate(5, 2015)),
            c(replicate(5, 1)),
            c(rnorm(5, 0, 1)),
            c(replicate(5, 'A')))

df2 = cbind(c(replicate(5, 2015)),
            c(replicate(5, 2)),
            c(rnorm(5, 0, 1)),
            c(replicate(5, 'A')))

df3 = cbind(c(replicate(5, 2016)),
            c(replicate(5, 1)),
            c(rnorm(5, 0, 1)),
            c(replicate(5, 'B')))

df = rbind(df1, df2, df3) %>% as_tibble() %>% mutate(V3 = as.numeric(V3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...