1

我有一个名为 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

基本上,想法是:从原始数据集中,我选择两个组(茄子和茉莉),我想创建一个新的数据框。这个新的数据框有“用户”变量而不是“组”。每个用户名实际上是“组名+A(B或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 是愚蠢的,即使这样,还有其他更快的方法吗?

4

1 回答 1

5

你可以做这样的事情

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
于 2013-07-12T13:54:45.543 回答