【发布时间】:2017-04-03 08:19:57
【问题描述】:
我从 R 开始,我正在为此苦苦挣扎......如果你们中的任何人能建议我如何做到这一点,我将不胜感激......基本上我有两个列表......
List1
2013 2014 2015
3 16 6
List2
2010 2011 2012 2013 2014 2015 2016 2017
201.5 268.5 106.0 205.0 392.0 348.0 307.0 64.0
有了这两个列表,我想得到这样的东西......
List3
2013 2014 2015 2016 2017
205.0 392.0 348.0 0 0
或者这样也可以
List 3
2013 2014 2015
205.0 392.0 348.0
我尝试创建一个向量,但我无法将年份 Colname 传递给它,知道如何获得我想要的结果吗?
提前致谢,这是我使用的代码...
PREvsCOR=function(){
start<- which(names(List2) == min(names(List1)))
fin <- which(names(List2) == max(names(List1)))
a <- vector(mode="numeric", length = (fin-start)+1)
for ( i in 1:length(a)){
a[i] <- List1[i] / List2[start]
start<- start+ 1
}
return(a)
} # fin de PREvsCOR
函数的输出:
[1] 0.01463415 0.04081633 0.01724138
如果我尝试使用以下方法为列命名:
colnames(precor) <- names(list1)
我收到此错误:
colnames<-(*tmp*, value = c("2013", "2014", "2015")) 中的错误: 尝试在小于二维的对象上设置“colnames”
【问题讨论】:
-
你有
list或vector或matrix吗? -
我通过使用 Tapply 得到 list1 和 list2,我认为这会返回一个列表对象
-
对于您的
List3,您是否打算省略列出的那些年之前?我怀疑将它们存储在具有两列的 data.frame 中可能会更好:year和value。从那里您可以轻松地使用连接(base-R:merge或dplyr::left_joinand family)来管理您的集合。 -
我都检查过了,它们是数组
-
也许你需要
List2[match(names(List1), names(List2))]