У меня есть фрейм данных, где у каждой строки есть идентификатор и значения активности. Ниже приведен пример кадра данных:
test=data.frame(
start=c(1,50,100,150,200,250,300,350,400,450,500,100,150,200),
end=c(50,100,150,200,250,300,350,400,450,500,550,150,200,250),
sub_id=c("subid_1_1","subid_1_2","subid_1_3","subid_1_4","subid_1_5","subid_1_6","subid_1_7","subid_1_8","subid_1_9","subid_1_10","subid_1_11","subid_2_1","subid_2_2","subid_2_3"),
id=c(rep("id_1",11),rep("id_2",3)),
activity=c(-0.2,-0.6,-1,-1.2,-1.6,-1.6,-0.5,0.2,-1.2,-0.8,0.1,0.1,1.2,0.5))
Для каждой строки с одинаковым идентификатором:
Я хочу объединить все строки, не разделенные значением> -1, близким к минимальному ценность деятельности. И сохраните первое значение начала и последнего значения конца для объединенных строк и среднее значение, вычисленное для выбранных строк.
Ожидаемый результат должен быть:
start end id activity
100 300 id_1 -1.2
Сначала я удаляю строку, которая имеют большее значение, чем -1
test=test[test$activity<=-1,]
Я попытался объединить строки, используя setDT
library("data.table")
final_test=setDF(setDT(test)[, .(start = min(start), end = max(end),activity=mean(activity)),by=id])
Таким образом, он сохраняет первый и последний элемент по id и вычисляет среднее значение активности, но это не так именно то, что я хочу.
И это не работает
final_test=setDF(setDT(test)[, .(start = min(start), end = max(end),activity=mean(activity)),by=id[test$activity<=-1]])
Спасибо за вашу помощь