【问题标题】:R: Efficient way for spreading vectorsR:传播向量的有效方法
【发布时间】:2018-05-25 22:01:50
【问题描述】:

有没有一种高效的编程方法来解决以下任务?

想象以下向量:

A<-[a,b,c...k]

并希望通过以下方式传播它: 让我们从例如开始n=2

B<-[a,a,b,b,c...,k,k]

现在 n=4 或任何大于 1 的数字

C<-[a,a,a,a,b,...,k,k,k,k]

通过循环来解决它似乎很容易,但是有没有我错过/可以使用的任何基于函数或向量的操作?一个 tidyverse 解决方案(用于在管道中使用它)对我来说是最好的解决方案。

(很难对这项任务进行研究,因为我是 R 的新手,并且没有正确的术语来搜索。任何帮助都会有所帮助。)

【问题讨论】:

    标签: r function vector tidyverse


    【解决方案1】:

    A <- letters[1:11]
    A
    [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
    

    如果你使用函数rep 和参数each,你会得到你想要的:

    rep(A, each=2)
     [1] "a" "a" "b" "b" "c" "c" "d" "d" "e" "e" "f" "f" "g" "g" "h" "h" "i" "i" "j"
    [20] "j" "k" "k"
    
    rep(A, each=3)
    [1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d" "e" "e" "e" "f" "f" "f" "g"
    [20] "g" "g" "h" "h" "h" "i" "i" "i" "j" "j" "j" "k" "k" "k"
    

    【讨论】:

      【解决方案2】:

      一个选项是使用rep 和参数times = 24,然后使用sort 结果。另一种选择是使用mapply,然后使用c 运算符。

       c(mapply(rep, 2 ,A)) # OR sort(rep(A, times = 2))
       #[1] "a" "a" "b" "b" "c" "c" "d" "d" "e" "e" "f" "f" "g" "g" "h" "h" "i" "i" "j" "j"
       #[21] "k" "k"
      
       c(mapply(rep,A, 4))  #OR sort(rep(A, times = 2))
       #[1] "a" "a" "a" "a" "b" "b" "b" "b" "c" "c" "c" "c" "d" "d" "d" "d" "e" "e" "e" "e"
       #[21] "f" "f" "f" "f" "g" "g" "g" "g" "h" "h" "h" "h" "i" "i" "i" "i" "j" "j" "j" "j"
       #[41] "k" "k" "k" "k"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 2013-09-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 2019-03-27
        相关资源
        最近更新 更多