【问题标题】:Create new columns based on similar row values根据相似的行值创建新列
【发布时间】:2014-11-03 13:20:44
【问题描述】:

如何根据匹配的行值创建一组新的数据框列? 例如,对于这个示例数据框:

x<-data.frame(cbind(numsp=rep(c(16,64,256),each=12),Colless=rep(c("loIc","midIc","hiIc"),each=4, times=3), lambdaE=rep(c(TRUE,FALSE),each=2,times=9),ntree=rep(c(1,2),length.out=36), metric1=seq(1:36), metric2=seq(1:36)))

对于某些参数,例如 lambdaE,我想根据 lambdaE 是 TRUE 还是 FALSE,为 metric1 和 metric 2 创建新列。 数据框看起来像这样:

x2<-data.frame(cbind(numsp=rep(c(16,64,256),each=6),Colless=rep(c("hiIc","loIc","midIc"),each=2, times=3), ntree=rep(c(1,2),length.out=18), metric1.lambdE.FALSE=c(11,12,3,4,7,8,35,36,27,28,31,32,23,24,15,16,19,20), metric2.lambdE.FALSE=c(11,12,3,4,7,8,35,36,27,28,31,32,23,24,15,16,19,20),metric1.lambdE.TRUE=c(9,10,1,2,5,6,33,34,25,26,29,30,21,22,13,14,17,18), metric2.lambdE.TRUE=c(9,10,1,2,5,6,33,34,25,26,29,30,21,22,13,14,17,18)))

或者对于参数“Colless”,为每个 Colless 级别的 metric1 和 metric2 提供一组新的列。

提前致谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    好的,看起来库 reshape2 有一个快速的解决方案:

    reshape(x, direction="wide", idvar=c("numsp","Colless","ntree"), timevar="lambdaE")
    

    【讨论】:

    • 这个reshape 函数是stats 包的一部分。 reshape2中没有reshape函数。
    • 所以我注意到在重复的情况下,reshape 函数只接受第一个实例并丢弃其余实例。有没有办法简单地将重复的实例附加到数据框的末尾?
    【解决方案2】:

    reshape2的melt和dcast也可以用:

    library(reshape2)
    mm =melt(x, id=c('numsp','Colless','lambdaE','ntree'))
    dcast(mm, numsp+Colless+ntree~lambdaE+variable)
       numsp Colless ntree FALSE_metric1 FALSE_metric2 TRUE_metric1 TRUE_metric2
    1     16    hiIc     1            11            11            9            9
    2     16    hiIc     2            12            12           10           10
    3     16    loIc     1             3             3            1            1
    4     16    loIc     2             4             4            2            2
    5     16   midIc     1             7             7            5            5
    6     16   midIc     2             8             8            6            6
    7    256    hiIc     1            35            35           33           33
    8    256    hiIc     2            36            36           34           34
    9    256    loIc     1            27            27           25           25
    10   256    loIc     2            28            28           26           26
    11   256   midIc     1            31            31           29           29
    12   256   midIc     2            32            32           30           30
    13    64    hiIc     1            23            23           21           21
    14    64    hiIc     2            24            24           22           22
    15    64    loIc     1            15            15           13           13
    16    64    loIc     2            16            16           14           14
    17    64   midIc     1            19            19           17           17
    18    64   midIc     2            20            20           18           18
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2023-03-17
      • 1970-01-01
      • 2017-07-27
      • 2020-10-24
      • 2021-11-24
      相关资源
      最近更新 更多