Вы были близки с rowMeans()
, но вместо этого вам нужно colMeans()
. Другие показали, как использовать встроенные или дополнительные функции, и я, безусловно, рекомендую вам их использовать. Однако, может быть полезно посмотреть, как сделать что-то подобное вручную:
## using df from Dirk's answer, we split the data in Site Date combinations
df.sp <- with(df,
split(data.frame(Temp, SpCond, Salinity, Depth, Turbidity,
Chlorophyll),
list(Site = Site, Date = Date)))
## The above gives a list of data frames one per date-site combo,
## to which we apply the colMeans() function
df.mean <- data.frame(t(sapply(df.sp, colMeans)))
На данный момент нам нужно провести дополнительную уборку, если вы хотите, чтобы результат был хорошим, как ответы других:
## Process the rownames on df.mean
name.parts <- strsplit(rownames(df.mean), "\\.")
## pull out the Site part (before the '.')
df.mean <- within(df.mean, Site <- as.numeric(sapply(name.parts, `[`, 1)))
## pull out the Date part (after the '.')
df.mean <- within(df.mean, Date <- sapply(name.parts, `[`, 2))
## rearrange the columns
df.mean <- df.mean[, c(7:8,1:6)]
Примечание снова , в большинстве случаев вам следует использовать стандартные функции, как описано в других ответах. Однако иногда может быть быстрее приготовить собственное решение, и приведенное выше может служить руководством для достижения этой цели.