r - 在 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
的值平均两个不同的级别x1
year
cou
我怎样才能在 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
解决方案
我相信您的预期输出有误,如果是这样,我认为这应该可以满足您的要求:
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