我有一个如下所示的数据框:
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
其中'Count'是每次给定调查所观察到的人数。我想重新整形数据,以便每个人都有一行(记录):例如:
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
根据需要将每次调查的数据复制多次。我考虑过使用melt()或summarize()函数,但因为COUNT变量的范围是1到10而被卡住了。
由于
答案 0 :(得分: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
答案 1 :(得分: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