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