Consider the following sample data. The data has 2 individuals per group and each individual has 2 entries. Sample data
The code below computes sum of Func per group using split() function. I would like a code that will split the data and sum Func only for the first entry per individual (i.e sum for the red highlighted entries only).
Func<-X*Y Z
GroupSum<-as.numeric( sapply( split(Func,group),sum) ) # Group sum of X*Y Z
sum(GroupSum) # Total fum of X*Y Z over all entries.
CodePudding user response:
We may use a group by approach i.e. grouped by 'group', slice the first row, ungroup, and then summarise to get the sum of X multiplied by 'Y' and added to 'Z'
library(dplyr)
df1 %>%
group_by(group) %>%
slice_head(n = 1) %>%
ungroup %>%
summarise(out = sum(X * Y Z, na.rm = TRUE))
Or can use duplicated in base R
with(subset(df1, !duplicated(group)), sum(X * Y Z, na.rm = TRUE))
