我有关于物种到达食物的到达时间的数据。我希望能够通过使用breed
值(即到达时间)来确定每个屠体的breed_jackals
和breed_hyena
级别之前发生的got.here
级别。
在carcass_336
的第一种情况下我只想要订单
我为豺狗获得了一个值breed_eagles
。
对于第二个尸体carcass_338
,我依次为鬣狗breed_lappets
和breed_eagles
提供2个等级。豺狼的3个级别,因为鬣狗到达它之前,即breed_lappets
,breed_eagles
& breed_hyena
。
我认为arrivals$breed[arrivals$mycarcass=="carcass_336"]
会起作用,但它会给我所有级别。
理想情况下,我也想通过使用每个最小got.here
来挑选出直接在豺和鬣狗之前发生的等级。例如。对于carcass_338
,它将是breed_eagles
的{{1}}。再一次,我认为got.here值是有用的,因为我已经用它来为每个屠体提取最短的到达时间用于另一个目的:
breed_hyenas
这是我的数据:
arrivals[ arrivals$got.here == ave(arrivals$got.here, arrivals$mycarcass, FUN=min), ]
我喜欢的预期输出将来自此,并且将是这些事件的频率。例如对于豺狼
arrivals <- read.table(header=T, text="
who breed got.here mycarcass
167 breed_eagles 102 carcass_336
183 breed_eagles 108 carcass_336
181 breed_eagles 271 carcass_336
134 breed_eagles 284 carcass_336
191 breed_eagles 311 carcass_336
283 breed_jackals 5419 carcass_336
118 breed_lappets 200 carcass_338
198 breed_eagles 219 carcass_338
151 breed_eagles 256 carcass_338
206 breed_hyenas 1759 carcass_338
294 breed_jackals 7948 carcass_338
235 breed_hyenas 10988 carcass_338
215 breed_hyenas 13629 carcass_338
290 breed_jackals 17013 carcass_338")
答案 0 :(得分:1)
这是在豺狗到来之前按物种计算到达数量的一种方法。可能有一种更清洁的方法。为清楚起见,我只会展示豺狼的解决方案,但获得鬣狗的结果会很简单。
# for each carcass, calculate the first jackal arrival
first_jackals <- aggregate(got.here~mycarcass,
data=arrivals[arrivals$breed=="breed_jackals",], FUN=min)
# tabulate the number of other animals arriving before the jackal
beat_jackals <- sapply(unique(arrivals$mycarcass), function(i) {
table(arrivals$breed[arrivals$mycarcass==i &
arrivals$got.here < first_jackals$got.here[first_jackals$mycarcass==i]])})
这将返回一个矩阵,其中包含每个品种的计数,包括鬣狗和豺狼。现在,我们从计数中删除鬣狗和豺,并将胴体名称添加到列中:
# drop unwanted breeds
beat_jackals <-
beat_jackals[row.names(beatJackals) != "breed_jackals",]
# add carcass names to the columns
colnames(beat_jackals) <- unique(arrivals$mycarcass)
因为sapply
按照相同的顺序unique(arrivals$mycarcass)
处理了屠体,我们不必担心错位。
要获得品种到达每个屠体的订单,您可以使用以下内容:
arrival_order <- sapply(unique(arrivals$mycarcass), function(i) {
unique(arrivals[arrivals$mycarcass==i, "breed"])})
这将允许你拉出豺狼之前到达的品种:
sapply(arrival_order, function(i) i[(which(i=="breed_jackals"))-1])