添加在R中按升序排序的单个变量

时间:2017-12-10 13:50:19

标签: r variables sequence

假设我有一个数据集(mydata)并想添加一个新列(newvar):

newvar <- c(11, 5, 6, 7, 3, 12, 4, 5, 9)

mydata$newvar <- newvar

如何添加一个新列,其值严格增加1到3百万?

当然我写不出类似的东西:

newvar <- c(1, 2, 3, 4, 5, ..., 3000000)

3 个答案:

答案 0 :(得分:2)

newvar <- 1:3000000
mydata$newvar <- newvar

答案 1 :(得分:2)

让我们回顾一下在R中创建序列的方法。

### Method 1
newvar1 <- 1:3000000
##3 Method 2
newvar2 <- seq(1, 3000000, by = 1)
### Method 3
newvar3 <- seq(1L, 3000000L)
### Method 4
newvar4 <- seq.int(1L, 3000000L)
### method 5
newvar5 <- seq_len(3000000)
### Method 6
# Create example data frame
mydata <- data.frame(Var = runif(3000000))

newvar6 <- seq_along(mydata$Var)

方法1使用:创建序列。方法2和方法3使用seq指定序列的fromto。请注意,方法2的输出为numeric,而方法3为integer,表明指定fromto的方式对于类的类型很重要输出

方法4使用seq.int。方法5使用seq_len指定length.out参数,这是一个显示序列长度的数字方法6使用seq_along指定along.with参数,这是一个矢量与所需输出的长度相同。这意味着我们可以将along.with指定为与目标数据框中的一列相同。

我使用microbenchmark包来比较这些方法的速度。请注意,在这些方法中,方法2的输出为numeric,而其他所有输出均为integer

library(microbenchmark)   
library(ggplot2)

m <-microbenchmark(m1 = {1:3000000},
                   m2 = {seq(1, 3000000, by = 1)},
                   m3 = {seq(1L, 3000000L)},
                   m4 = {seq.int(1L, 3000000L)},
                   m5 = {seq_len(3000000)},
                   m6 = {seq_along(mydata$Var)},
                   times = 1000)
m
# Unit: milliseconds
# expr       min        lq      mean    median        uq      max neval
#   m1  3.646180  3.902131  7.614828  4.121517  4.825223 202.5163  1000
#   m2 39.496001 44.544780 59.336825 52.322098 59.685341 291.0407  1000
#   m3  3.701989  3.978467  7.353326  4.181496  4.832920 154.9543  1000
#   m4  3.675046  3.938375  7.085586  4.132423  4.670625 166.1905  1000
#   m5  3.674405  3.928431  7.744393  4.129857  4.793149 153.2762  1000
#   m6  3.724440  3.959223  7.021631  4.192081  4.810148 158.8564  1000

autoplot(m)

enter image description here

结果表明,方法2比其他方法慢很多,但其他方法没有显着差异。

答案 2 :(得分:1)

你应该这样做:

newvar <- seq(1, 3000000, 1)