【问题标题】:How to populate new variable with repeated values from vector?如何用向量中的重复值填充新变量?
【发布时间】:2019-02-26 21:53:26
【问题描述】:

我有一个值向量:

    values = c(22, 42, 243)

我在数据框中有一个变量:

    df$variable = 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3

如何在我的数据框中的新变量中重复值向量中的每个值 n 次,以便获得以下信息:

    df$new_variable = 22, 22, 22, 22, 42, 42, 42, 42, 243, 243, 243, 243

【问题讨论】:

    标签: r dataframe vector


    【解决方案1】:

    最简单的方法是使用sapply

    sapply(variable, function(x) df$values[x])
    

    嗯...还有一个更简单的解决方案:

    values[df$variable]
    

    【讨论】:

    • 如果 df$variabledf$variable + 5 怎么办?不过对于 OP 来说似乎不是问题。
    • 很高兴您添加了values[variable]
    • 太棒了,很棒的解决方案!我很欣赏这种简单。谢谢。
    • @markus 在这种情况下做values[as.integer(factor(df$variable))]
    • 当然,这种情况假设 OP 打算仅根据出现的顺序将variablevalue 进行位置匹配……这似乎是一个非常奇怪的情况。如果 df$variable 改为 df$variable + 5 我可能会建议有一些早期的问题/错误需要修复。
    【解决方案2】:

    您可以使用rleinverse.rle

    r <- rle(variable)
    

    r 是类"rle" 的对象

    r
    #Run Length Encoding
    #  lengths: int [1:3] 4 4 4
    #  values : num [1:3] 1 2 3
    

    用您的values 替换其值槽并调用inverse.rle 以获得所需的输出

    r$values <- values
    inverse.rle(r)
    # [1]  22  22  22  22  42  42  42  42 243 243 243 243
    

    数据

    values = c(22, 42, 243)
    variable = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)
    

    【讨论】:

      【解决方案3】:

      如果variable 不是values 的索引元素,那么我们可以这样做

      rep(values, tapply(variable, variable, length))
      # [1]  22  22  22  22  42  42  42  42 243 243 243 243
      

      或者,rle()

      rep(values, rle(variable)$lengths)
      # [1]  22  22  22  22  42  42  42  42 243 243 243 243
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-27
        • 2019-11-09
        • 2020-05-29
        • 1970-01-01
        相关资源
        最近更新 更多