Я новичок в R, и я написал код для обобщения данных из CSV-файла в соответствии с моими потребностями.суммировать данные из csv, используя R
вот код.
raw <- read.csv("trees.csv")
выглядит как приходит этот
SNAME CNAME FAMILY PLOT INDIVIDUAL CAP H
1 Alchornea triplinervia (Spreng.) M. Arg. Tainheiro Euphorbiaceae 5 176 15 9.5
2 Andira fraxinifolia Benth. Angelim Fabaceae 3 321 12 6.0
3 Andira fraxinifolia Benth. Angelim Fabaceae 3 326 14 7.0
4 Andira fraxinifolia Benth. Angelim Fabaceae 3 327 18 5.0
5 Andira fraxinifolia Benth. Angelim Fabaceae 3 328 12 6.0
6 Andira fraxinifolia Benth. Angelim Fabaceae 3 329 21 7.0
#add 2 other rows
for (i in 1:nrow(raw)) {
raw$VOLUME[i] <- treeVolume(raw$CAP[i],raw$H[i])
raw$BASALAREA[i] <- treeBasalArea(raw$CAP[i])
}
#here. Мне нужен новый фрейм данных со средними столбцами H и CAP и суммами столбцов VOLUME и BASALAREA. Этот блок данных сгруппирован по столбцу SNAME и подгруппирован столбцом PLOT.
plotSummary = merge(
aggregate(raw$CAP ~ raw$SNAME * raw$PLOT, raw, mean),
aggregate(raw$H ~ raw$SNAME * raw$PLOT, raw, mean))
plotSummary = merge(
plotSummary,
aggregate(raw$VOLUME ~ raw$SNAME * raw$PLOT, raw, sum))
plotSummary = merge(
plotSummary,
aggregate(raw$BASALAREA ~ raw$SNAME * raw$PLOT, raw, sum))
Функции treeVolume и treeBasal area просто возвращают числа.
treeVolume <- function(radius, height) {
return (0.000074230*radius**1.707348*height**1.16873)
}
treeBasalArea <- function(radius) {
return (((radius**2)*pi)/40000)
}
Я уверен, что есть лучший способ сделать это, но как?
Do ....... what? –
замените уродливый 4 агрегат на что-то менее повторяющееся – fandreacci
@ user1424495 Хотя хорошо видеть, что вы пробовали, поэтому у нас есть идея, что улучшить, если вы считаете, что ваш код «уродливый», может быть, вы могли бы рассказать нам слова, что есть. Комментарий '#здесь приходит 'не очень помогает. – Gregor