R 基于条件的一列平均值(在不同列中)

R 基于条件的一列平均值(在不同列中),r,dataframe,dplyr,R,Dataframe,Dplyr,首先是守则: 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)),

首先是守则:

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()
问题陈述:我想平均每个
V4
V1
的列
V3
。例如,2015年,
V3
下的所有1都应取平均值。同样,所有2个应分别取平均值。本质上,2015年1和A的排数不是5排,而是只有一排(这是平均数)。类似地,2和A的行数不是5行,而是只有一行

实际数据帧更长,7个
V4
条目中的每个条目每年有365个
V3
条目(从2015年到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

哇!既然你已经做到了。看起来很容易。谢谢,多米尼克。
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))