Мы можем использовать data.table
методы. Преобразуйте файл «data.frame» в «data.table» (setDT(df)
), сгруппированный по «ID», укажите i
с логическим выражением group ==1
, получите sum
из «t» и назначьте ( :=
) это «новое». По умолчанию другим строкам присваивается значение NA
, по умолчанию
library(data.table)
setDT(df)[group == 1, new := sum(t), ID]
df
# ID t group new
#1: 1 12.0 1 26
#2: 1 14.0 1 26
#3: 1 2.0 6 NA
#4: 2 0.5 7 NA
#5: 2 12.0 1 12
#6: 3 3.0 1 3
#7: 4 2.0 4 NA
Данные
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 4L), t = c(12,
14, 2, 0.5, 12, 3, 2), group = c(1L, 1L, 6L, 7L, 1L, 1L, 4L)),
class = "data.frame", row.names = c(NA,
-7L))