首页 > 解决方案 > 在 R 中组合每个类别的级别

问题描述

我有以下数据框:

year<- c(rep(c("1995"),4))
cou <- c(rep(c("AT"),4))
var_far1<- c("A","B", "C", "E")
x1      <- c(NA,2,NA,3)
var_far2<- c("A","B", "C-E", "C-E")

data1<-data.frame(cou,year,var_far1,x1,var_far2)  

year<- c(rep(c("1996"),4))
cou <- c(rep(c("AT"),4))
var_far1<- c("A","B", "C", "E")
x1      <- c(NA,2,5,3)
var_far2<- c("A","B", "C-E", "C-E")

data2<-data.frame(cou,year,var_far1,x1,var_far2)  

data<-rbind(data1,data2)

看起来像这样:

 cou year var_far1 x1 var_far2
1  AT 1995        A  NA        A
2  AT 1995        B  2        B
3  AT 1995        C NA      C-E
4  AT 1995        E  3      C-E
5  AT 1996        A  1        A
6  AT 1996        B  2        B
7  AT 1996        C  5      C-E
8  AT 1996        E  3      C-E

我想根据per pervar_far1的值平均两个不同的级别x1yearcou

我怎样才能在 R 中做到这一点?

更新:预期结果应如下所示:

cou year var_far1 x1 var_far2 x1_new
1  AT 1995        A  NA        A    NA
2  AT 1995        B  2        B    2.0
3  AT 1995        C NA      C-E    3.0
4  AT 1995        E  3      C-E    3.0
5  AT 1996        A  1        A    1.0
6  AT 1996        B  2        B    2.0
7  AT 1996        C  5      C-E    4
8  AT 1996        E  3      C-E    4

标签: rdata-manipulation

解决方案


我相信您的预期输出有误,如果是这样,我认为这应该可以满足您的要求:

library(dplyr)
data %>%
  group_by(cou,year,var_far2) %>%
  mutate(x1_new=mean(x1,na.rm=T)) %>%
  ungroup
# # A tibble: 8 x 6
#      cou   year var_far1    x1 var_far2 x1_new
#   <fctr> <fctr>   <fctr> <dbl>   <fctr>  <dbl>
# 1     AT   1995        A     1        A      1
# 2     AT   1995        B     2        B      2
# 3     AT   1995        C    NA      C-E      3
# 4     AT   1995        E     3      C-E      3
# 5     AT   1996        A     1        A      1
# 6     AT   1996        B     2        B      2
# 7     AT   1996        C     5      C-E      4
# 8     AT   1996        E     3      C-E      4

推荐阅读