【问题标题】:duplicate rows and create new data frame in R重复行并在 R 中创建新数据框
【发布时间】:2013-07-12 13:49:14
【问题描述】:

我有一个名为 intraPByGroup 的 R 数据框,如下所示:

group, week1, week2, week3, week4
kiwi,23,43,54,23
eggplant,22,32,33,63
jasmine,23,454,12,654
coconut,32,56,22,31

我想做的是创建一个新的数据框,如下所示

user,week1,week2,week3,week4
eggplantA,22,32,33,63
eggplantB,22,32,33,63
eggplantC,22,32,33,63
jasmineA,23,454,12,654
jasmineB,23,454,12,654
jasmineC,23,454,12,654

基本上,想法是:从原始数据集中,我选择两个组(茄子和茉莉),我想创建一个新的数据框。这个新的数据框有“用户”变量而不是“组”。每个用户名实际上是“groupname+A(B or C)”,其余所有值对同一组中的所有用户重复。

我应该如何在 R 中做到这一点?

我正在考虑首先删除组名并选择一行,然后组成一个新行,然后对每个选定的组重复此操作。

eggFrame <- intraPByGroup[intraPByGroup$group=="eggplant",-1]
eggFrame1 <- eggFrame
eggFrame1["user"] <- "Eggplant-A"
eggFrame2 <- eggFrame
eggFrame2["user"] <- "Eggplant-B"
total <- rbind(eggFrame1,eggFrame2)

我觉得反复做rbind很蠢,即使这样,还有其他更快的方法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以这样做

    data <- subset(data, group %in% c("eggplant", "jasmine"))[rep(1:2, each = 3), ]
    data$group <- factor(paste0(data$group, LETTERS[1:3]))
    data
    ##          group week1 week2 week3 week4
    ## 2   eggplantA    22    32    33    63
    ## 2.1 eggplantB    22    32    33    63
    ## 2.2 eggplantC    22    32    33    63
    ## 3    jasmineA    23   454    12   654
    ## 3.1  jasmineB    23   454    12   654
    ## 3.2  jasmineC    23   454    12   654
    

    如果出于某种原因您不喜欢这样的行名并且您想将“组”更改为“用户”

    rownames(data) <- NULL
    names(data)[1] <- "user"
    data
    ##        user week1 week2 week3 week4
    ## 1 eggplantA    22    32    33    63
    ## 2 eggplantB    22    32    33    63
    ## 3 eggplantC    22    32    33    63
    ## 4  jasmineA    23   454    12   654
    ## 5  jasmineB    23   454    12   654
    ## 6  jasmineC    23   454    12   654
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2014-12-31
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多