创建一个矩阵列表,用于测量R中增长率的差异
假设我有以下列表:创建一个矩阵列表,用于测量R中增长率的差异,r,list,matrix,R,List,Matrix,假设我有以下列表: $`1990` cntry year growth 1 1 1990 1 2 2 1990 2 3 3 1990 14 $`1991` cntry year growth 4 1 1991 6 5 2 1991 5 6 3 1991 7 创建列表的代码: cntry<-c(1,2,3,1,2,3) year<-c(1990,1990,1990,19
$`1990`
cntry year growth
1 1 1990 1
2 2 1990 2
3 3 1990 14
$`1991`
cntry year growth
4 1 1991 6
5 2 1991 5
6 3 1991 7
创建列表的代码:
cntry<-c(1,2,3,1,2,3)
year<-c(1990,1990,1990,1991,1991,1991)
growth<-c(1,2,14,6,5,7)
a<-data.frame(cntry,year,growth)
a.split<-split(a, as.factor(a$year))
欢迎任何帮助 使用
外部:
> lapply(a.split, function(x) t(outer(x$growth, x$growth, function(u,v) ifelse(u>v, u-v, 0))))
#$`1990`
# [,1] [,2] [,3]
#[1,] 0 1 13
#[2,] 0 0 12
#[3,] 0 0 0
#$`1991`
# [,1] [,2] [,3]
#[1,] 0 0 1
#[2,] 1 0 2
#[3,] 0 0 0
像往常一样完美,谢谢@Bouvel上校!最后一个问题:如果组合中存在NA值,如何确保粘贴0?我觉得理解不正确,您是指a.split中某个data.frame的增长列中的NA?在本例中,您可以这样做lst=lapply(a.split,function(u){u[is.na(u)]=0;u})
,然后应用外部的单行脚本。
> lapply(a.split, function(x) t(outer(x$growth, x$growth, function(u,v) ifelse(u>v, u-v, 0))))
#$`1990`
# [,1] [,2] [,3]
#[1,] 0 1 13
#[2,] 0 0 12
#[3,] 0 0 0
#$`1991`
# [,1] [,2] [,3]
#[1,] 0 0 1
#[2,] 1 0 2
#[3,] 0 0 0