【问题标题】:Constructing vector based on values in dataframe根据数据框中的值构造向量
【发布时间】:2013-10-25 12:59:12
【问题描述】:

我有以下数据:

 df <- data.frame(Start = c(1,11,26), End = c(10,25,30), Mean = c(0.04349, 0.12, 0.04)) 

 #df
 #  start End    Mean
 #1     1  10 0.04349
 #2    11  25 0.12000
 #3    26  30 0.04000

据此,我想构造一个向量,其中条目为Mean,索引由startend 确定。

换句话说,向量将有0.04349作为从索引1到索引10的条目,那么向量条目的值将是从索引11到25的0.12,等等。这是预期的结果:

 > res = c(rep(0.04349, df$End[1] - df$Start[1] + 1), rep(0.12, df$End[2] - df$Start[2] + 1), rep(0.04, df$End[3] - df$Start[3] + 1))


 > res
  [1] 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.04349 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000
 [19] 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.12000 0.04000 0.04000 0.04000 0.04000 0.04000

但是我上面获取它的方式非常低效,尤其是对于大量行。

有没有一种直接的方法可以在没有任何 for 循环的情况下构造这个向量?实际上,数据框有大量的行。

谢谢!

【问题讨论】:

    标签: r vector dataframe


    【解决方案1】:

    在您更新的帖子中,您几乎就在那里:

    with(df, rep(Mean, times=End-start+1))
    

    【讨论】:

      【解决方案2】:
      library(data.table)
      df <- data.table(df)
      df[,list(someindex = start:End), by = Mean]
      

      【讨论】:

        猜你喜欢
        • 2011-11-21
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多