【问题标题】:How can I make a variable in a dataset containing a vector of all numbers between two other variables?如何在包含其他两个变量之间的所有数字的向量的数据集中创建一个变量?
【发布时间】:2018-12-11 00:42:12
【问题描述】:

这是一个示例数据框。

x <- c(1,2,3)
y <- c(10,10,10)

d <- data.frame(x, y)

我想生成第三个变量 (z),其中包含 x:y 中所有值的向量。例如,z 的第一个值应该是 c(1,2,3,4,5,6,7,8,9,10)。

我该怎么做?尝试d$z &lt;- d$x:d$y 只会给出错误“数值表达式有 3 个元素:仅使用第一个元素。”

【问题讨论】:

    标签: r


    【解决方案1】:
     mapply(":", x, y)
    

    与 RLave 答案相同,但不需要额外的包。

    【讨论】:

      【解决方案2】:

      带有purrr包和函数map2

      purrr::map2(x,y, function(x,y) x:y)
      
      # [[1]]
      # [1]  1  2  3  4  5  6  7  8  9 10
      # 
      # [[2]]
      # [1]  2  3  4  5  6  7  8  9 10
      # 
      # [[3]]
      # [1]  3  4  5  6  7  8  9 10
      

      当然这需要给出list,因为长度不同。请注意,同样可以通过一个简单的循环来实现。

      【讨论】:

        【解决方案3】:

        也是基础R:

        d$z <- lapply(1:nrow(d), function(i) with(d[i, ], x:y))
        
        > str(d)
        'data.frame':   3 obs. of  3 variables:
         $ x: num  1 2 3
         $ y: num  10 10 10
         $ z:List of 3
          ..$ : int  1 2 3 4 5 6 7 8 9 10
          ..$ : int  2 3 4 5 6 7 8 9 10
          ..$ : int  3 4 5 6 7 8 9 10
        

        【讨论】:

          猜你喜欢
          • 2019-08-16
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 2011-02-26
          • 1970-01-01
          • 2013-04-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多