2013-07-12 55 views
1

新的數據幀我有一個名爲intraPByGroup爲R的數據框如下:重複行,並創建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是愚蠢的,即使這樣,有沒有其他的更快的方式做到這一點?

回答

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並且要更改「組」爲「用戶」

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 
+0

完美,謝謝!!! – nan