Если мы хотим создать столбец, используйте 'SID' в качестве переменной группировки
df$numPR <- with(df, ave(PreviewRound, SID, FUN = sum))
или, если мы хотим получить итоговый вывод, используйте aggregate
aggregate(PreviewRound~ SID, df, FUN = sum)
Проблема с кодом ОП заключается в том, как заменяемые значения
df$numPR = numPR
в цикле for
ОП и, что более важно,
numPR = sum(df$PreviewRound)
принимает sum
всегоСтолбец «PreviewRound»
Столбец «numPR» обновляется каждый раз, когда выполняется цикл for
, оставляя только один sum
из last
обновленного unique
«SID».Чтобы избежать этого, используйте индекс
df$numPR <- NA
for (sid in unique(df$SID)) {
i <- df$SID == sid # create a logical index
numPR = sum(df$PreviewRound[i]) # subet the data based on the index
df$numPR[i] = numPR # assign the values only to those selected rows
}