【问题标题】:Combine Arrays in R if Column name Match如果列名匹配,则在 R 中合并数组
【发布时间】: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&lt;-(*tmp*, value = c("2013", "2014", "2015")) 中的错误: 尝试在小于二维的对象上设置“colnames”

【问题讨论】:

  • 你有listvectormatrix吗?
  • 我通过使用 Tapply 得到 list1 和 list2,我认为这会返回一个列表对象
  • 对于您的List3,您是否打算省略列出的那些年之前?我怀疑将它们存储在具有两列的 data.frame 中可能会更好:yearvalue。从那里您可以轻松地使用连接(base-R:mergedplyr::left_join and family)来管理您的集合。
  • 我都检查过了,它们是数组
  • 也许你需要List2[match(names(List1), names(List2))]

标签: r list vector merge


【解决方案1】:

感谢您的快速响应!欣赏!

Ronak Shah 让我找到了答案。其他想法可能也不错,但这个是最简单的,也是我想要的最好方法。

我只是按照他说的做了一个数组:

List2[match(names(List1), names(List2))]

然后做了我需要做的计算:

list3 <- list1 / List2[match(names(List1), names(List2))]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2016-07-08
    • 2022-01-15
    • 2022-11-28
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多