По сути, вы хотите преобразовать свои данные из длинного формата в широкий, с повторяющимися наблюдениями из Site
в одну строку.Функция R base reshape()
была разработана именно для этой задачи.
Единственное (небольшое) осложнение заключается в том, что вам сначала нужно добавить столбец (который я здесь называю obsNum
), который идентифицирует, какое первое, второе, третье и т. Д. Наблюдение в точке Site
.Установив timevar = "obsNum"
, вы можете сообщить reshape()
, в какой столбец вы хотите поместить каждое из значений date
.
df <- read.table(text = "Site date
1 12/01/2000
1 24/02/2000
1 13/08/2001
2 14/01/2000
2 21/01/2002
3 1/01/1999
3 21/04/2000", header=T, stringsAsFactors=FALSE)
df$obsNum <- unlist(sapply(rle(df$Site)$lengths, seq))
reshape(df, idvar="Site", timevar="obsNum", direction="wide")
# Site date.1 date.2 date.3
# 1 1 12/01/2000 24/02/2000 13/08/2001
# 4 2 14/01/2000 21/01/2002 <NA>
# 6 3 1/01/1999 21/04/2000 <NA>