У меня есть три набора данных поперечного сечения, и я пытаюсь объединить их в один продольный набор данных. Некоторые меры постоянны (id, пол, сообщество), а другие меняются со временем (x1 и y). Я хотел бы иметь длинный окончательный набор данных с одним столбцом для каждой из перечисленных выше переменных. Я думал, что merge_recurse() будет делать трюк, но он производит по два столбца для y и x1 (хотя данные12 и data14 сливаются, как я надеялся ... возможно, потому что эти переменные переименованы после первого слияния?). Любые мысли о том, как сделать это просто и быстро? Примеры данных ниже.Слияние данных для создания продольных данных
#Constant over time
id = seq(1, 100, 1)
sex = sample(c("male","female"), 100, replace=TRUE)
community = sample(c("comA", "comB", "comC", "comD"), 100, replace=TRUE)
#2010
year = rep(2010, 100)
x1 = rnorm(100, mean=5, sd=1)
y = rnorm(100, mean=10, sd=2)
z = rep(5, 100)
data10 = data.frame(cbind(id, year, sex, community, y, x1, z))
#2012
year = rep(2012, 100)
x1 = rnorm(100, mean=6, sd=1)
y = rnorm(100, mean=11, sd=2)
data12 = data.frame(cbind(id, year, sex, community, y, x1))
#2014
year = rep(2014, 100)
x1 = rnorm(100, mean=7, sd=1)
y = rnorm(100, mean=12, sd=2)
data14 = data.frame(cbind(id, year, sex, community, y, x1))
#Merge each year's data
library(reshape)
#Create a list of all datasets
alldata=list(data10, data12, data14)
#Merge data from multiple dataframes
data = merge_recurse(alldata, by=c("id", "year", "sex", "community")
head(data)
id year sex community y.x x1.x z y.y x1.y
1 1 2010 female comC 13.1771632561173 4.87556993759158 5 <NA> <NA>
2 2 2010 female comB 13.7778630888456 6.69677435551805 5 <NA> <NA>
3 3 2010 male comD 9.42440506678606 3.10067578314296 5 <NA> <NA>
4 4 2010 female comB 11.0739409098036 4.12318001019941 5 <NA> <NA>
5 5 2010 male comB 11.6015489242693 4.9565493450503 5 <NA> <NA>
6 6 2010 female comB 6.52739602897104 3.76896148237067 5 <NA> <NA>
Я думаю, что вы просто ищете 'do.call (rbind, ALLDATA)' ?? – Arun
Будет хорошо, если вы можете опубликовать образец вывода, т.е. head (data) – Nishanth
Извините, данные моего примера несколько вводят в заблуждение. Мои фактические наборы данных поперечного сечения содержат переменные, которые не измеряются в каждый период времени, и, следовательно, do.call (rbind, alldata) не работает. Он отлично работает, если все столбцы одинаковы. Выведенный выше код был добавлен выше. – DBK