Вот базовая версия, которая может работать. Я позаимствовал пример у Карстена.
На самом деле я делю data.frame
согласно subject
. Это приводит к списку
split(d, d$subject)
$A
subject duration
1 A 1.3
4 A 2.5
11 A 56.0
$B
subject duration
2 B 6.7
12 B 9.4
$C
subject duration
3 C 3.2
Используя lapply
, я пролистываю каждый элемент списка и столбец суммы duration
. Я добавил na.rm = TRUE
, чтобы функция по-прежнему суммировала, даже если присутствуют NA.
Я представляю это в одной строке
lapply(split(d, d$subject), function(x) sum(x$duration, na.rm = TRUE))
$A
[1] 59.8
$B
[1] 16.1
$C
[1] 3.2
Вы можете unlist
или поместить результат в data.frame
, чтобы преобразовать список в нечто более компактное.
unlist(lapply(split(d, d$subject), function(x) sum(x$duration, na.rm = TRUE)))
A B C D E F G H Z
59.8 16.1 3.2 2.7 99.0 8.4 12.5 19.7 3.2