【问题标题】:Union of arrays over dimension names in RR中维度名称上的数组联合
【发布时间】:2015-08-29 11:55:20
【问题描述】:

我在 R 中有多个数组。每个数组都有以下结构:
一种。维度名称是字符。
b.数组中的值是每个字符的频率。

c k j a d l n s      
5 5 3 1 1 1 1 1      

d j o a h i k q z r
4 4 4 3 2 2 2 1 1 1  

我想将这些数组合并为一个,以便保留每个字母的频率。
期望的输出:

    c k j a d l n s o h i k q z r      
[1] 5 5 3 1 1 1 1 1 0 0 0 0 0 0 0     
[2] 0 0 4 3 4 0 0 0 4 2 2 2 1 1 1     

如何做到这一点?

【问题讨论】:

    标签: arrays r vector set-union


    【解决方案1】:

    试试

     Un1 <- union(names(v1), names(v2))
     res <- do.call(rbind,lapply(list(v1, v2), function(x) 
               setNames(x[match(Un1, names(x))], Un1)))
     res[is.na(res)] <- 0
     res
     #     c k j a d l n s o h i q z r
     #[1,] 5 5 3 1 1 1 1 1 0 0 0 0 0 0
     #[2,] 0 2 4 3 4 0 0 0 4 2 2 1 1 1
    

    或者

    res1 <- as.matrix(merge(as.data.frame.list(v2), as.data.frame.list(v1),
                all=TRUE)[Un1])
    res1[is.na(res1)] <- 0
    res1
    #     c k j a d l n s o h i q z r
    #[1,] 5 5 3 1 1 1 1 1 0 0 0 0 0 0
    #[2,] 0 2 4 3 4 0 0 0 4 2 2 1 1 1
    

    数据

    v1 <- structure(c(5, 5, 3, 1, 1, 1, 1, 1), .Names = c("c", "k", "j", 
       "a", "d", "l", "n", "s"))
    
    v2 <- structure(c(4, 4, 4, 3, 2, 2, 2, 1, 1, 1), .Names = c("d", "j",
       "o", "a", "h", "i", "k", "q", "z", "r"))
    

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多