【问题标题】:How to create a new column made of a sequence without knowning the number of repetitions - data.table如何在不知道重复次数的情况下创建由序列组成的新列 - 数据表
【发布时间】:2019-09-18 14:40:33
【问题描述】:

我的问题远非复杂,但我没有在网上找到答案。简单来说,我想知道如何创建一个新列并向其中添加一个 seq() 。问题是我不知道需要的重复次数。我知道您可以指定 rep 参数,但如果您事先不知道数据是什么怎么办?有没有办法用 data.table 做到这一点? :

data <- data[, new.col := seq(1,3,1)]

这在逻辑上返回给我以下错误:

[.data.table(data, , :=(new.col, seq(1, 3, 1))) 中的错误:
提供 3 项分配给列 'new.col' 的 13502 项。 RHS 长度必须为 1(单个值即可)或匹配 LHS 长度正好。如果您想“回收”RHS,请使用 rep() 明确地向您的代码的读者表明这一意图。

这是我目前拥有的数据和我想要的输出的示例:

current data

id  sexe
109   F
100   F 
157   M 
151   M 
160   M 
168   M



desired output

id  sexe new.col
109   F     1
100   F     2
157   M     3
151   M     1
160   M     2
168   M     3

我知道它会起作用,但我不想指定 seq() 需要的 rep 数量。

谢谢。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以使用rep 的length.out 参数

    df[, new.col := rep(1:3, length.out = .N)]
    
    df
    #     id sexe new.col
    # 1: 109    F       1
    # 2: 100    F       2
    # 3: 157    M       3
    # 4: 151    M       1
    # 5: 160    M       2
    # 6: 168    M       3
    

    你也可以使用rep_len

    df[, new.col := rep_len(1:3, .N)]
    

    【讨论】:

    • 正是我正在寻找的答案,太棒了!谢谢。
    【解决方案2】:

    我们可以使用base R

    df$new.col <- rep(1:3, length.out = nrow(df))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2018-01-11
      相关资源
      最近更新 更多