【问题标题】:R create sequence in dplyr by id beginning with zeroR通过从零开始的id在dplyr中创建序列
【发布时间】:2018-04-10 12:05:19
【问题描述】:

我正在寻找最简洁的方法来在数据帧中创建一个以 id 开头的零序列。

df <- data.frame (id=rep(1:10,each=10))

如果我想从 1 开始序列,可以这样做:

library(dplyr)
df<-df %>% group_by(id) %>%
  mutate(start = 1:n()) %>% 
  ungroup()

但是从 0 开始不起作用,因为它会创建一个额外的数字(0-10 与 1-10 相比)所以我需要添加一个额外的行,有没有办法一步完成,也许使用dplyr?显然有许多变通方法,例如创建另一个数据集并将其附加到原始数据集。

df1 <- data.frame (id=1:10,
                  start=0)
new<-rbind(df,df1)

这似乎有点尴尬,而且不那么整洁。我知道您可以在 dplyr 中使用 rbind,但不确定如何将所有内容合并到一个步骤中,特别是如果您有其他非定时变化变量只想复制到新行中。有兴趣看看建议,谢谢。

【问题讨论】:

    标签: r dplyr seq


    【解决方案1】:

    您可以使用tidyverse 中的complete()

    library(tidyverse)
    df %>%
      group_by(id) %>%
      mutate(start = 1:n()) %>%
      complete(start = c(0:10)) %>%
      ungroup()
    

    产量

    # A tibble: 110 x 2
          id start
       <int> <int>
     1     1     0
     2     1     1
     3     1     2
     4     1     3
     5     1     4
     6     1     5
     7     1     6
     8     1     7
     9     1     8
    10     1     9
    # ... with 100 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2020-05-20
      • 2022-11-29
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多