2016-08-02 37 views
1

我有一個數據幀,看起來像這樣:與分類變量重複行的數據變化的次數

DATE SURVEY SPECIES COUNT 
07/12/16 13 Paka 1 
07/12/16 14 Paka 1 
07/12/16 15 Grouper 2 
07/12/16 16 Grouper 3 
07/12/16 18 Grouper 1 
07/12/16 20 Lehi 3 

在哪裏「計數」是對每個特定調查發現個體的數量。我想重塑數據,以便有一個單一的行(記錄),爲每個單獨的:例如: -

DATE SURVEY SPECIES 
07/12/16 13 Paka 
07/12/16 14 Paka 
07/12/16 15 Grouper 
07/12/16 15 Grouper 
07/12/16 16 Grouper 
07/12/16 16 Grouper 
07/12/16 16 Grouper 
07/12/16 18 Grouper 
07/12/16 20 Lehi 
07/12/16 20 Lehi 
07/12/16 20 Lehi 

隨着根據需要複製多次每次調查的數據。我認爲採用熔()或總結()函數,但我堅持,因爲COUNT變量從1範圍內的任何地方 - 10

感謝

回答

1

假設你原來的數據幀dat,您可以執行以下操作來獲得您想要的數據幀new_dat

new_dat <- dat[rep.int(1:nrow(dat), dat$COUNT), -4] 
rownames(new_dat) <- 1:nrow(new_dat) 

的關鍵是行索引向量rep.int(1:nrow(dat), dat$COUNT),而僅-4信號丟棄第4列,即列COUNT


測試

x <- "DATE SURVEY SPECIES COUNT 
     07/12/16 13 Paka 1 
     07/12/16 14 Paka 1 
     07/12/16 15 Grouper 2 
     07/12/16 16 Grouper 3 
     07/12/16 18 Grouper 1 
     07/12/16 20 Lehi 3" 

dat <- read.table(text = x, header = TRUE) 

#DATE SURVEY SPECIES COUNT 
#07/12/16 13 Paka 1 
#07/12/16 14 Paka 1 
#07/12/16 15 Grouper 2 
#07/12/16 16 Grouper 3 
#07/12/16 18 Grouper 1 
#07/12/16 20 Lehi 3 

new_dat <- dat[rep.int(1:nrow(dat), dat$COUNT), -4] 
rownames(new_dat) <- 1:nrow(new_dat) 

#  DATE SURVEY SPECIES 
#1 07/12/16  13 Paka 
#2 07/12/16  14 Paka 
#3 07/12/16  15 Grouper 
#4 07/12/16  15 Grouper 
#5 07/12/16  16 Grouper 
#6 07/12/16  16 Grouper 
#7 07/12/16  16 Grouper 
#8 07/12/16  18 Grouper 
#9 07/12/16  20 Lehi 
#10 07/12/16  20 Lehi 
#11 07/12/16  20 Lehi 
+0

工作就像一個魅力的另一種選擇!謝謝:) – makai

1

這裏是expandRows

library(splitstackshape) 
`row.names<-`(expandRows(df1, "COUNT"), NULL) 
#  DATE SURVEY SPECIES 
#1 07/12/16  13 Paka 
#2 07/12/16  14 Paka 
#3 07/12/16  15 Grouper 
#4 07/12/16  15 Grouper 
#5 07/12/16  16 Grouper 
#6 07/12/16  16 Grouper 
#7 07/12/16  16 Grouper 
#8 07/12/16  18 Grouper 
#9 07/12/16  20 Lehi 
#10 07/12/16  20 Lehi 
#11 07/12/16  20 Lehi 
+0

@ZheyuanLi這個任務是爲了讓它成爲一行代碼,但基本上'expandRows'只是一個包裝,它和你的代碼完全相同。但是,人們將封裝發佈爲獨特的解決方案並獲得更多積分。示例點[這裏](http://stackoverflow.com/questions/38711057/extracting-a-number-of-a-string-of-varying-lengths/38711116#38711116) – akrun