简体   繁体   中英

R: aggregate based of multiple columns

How can I sum DBH and Basal area by Tree.Species Compartment, Stand, Transect and Plot?

Tree.Species    DBH  Basal Area   Compartment   Stand   Transect Plot 
Sugar Maple     16.4    211.1336    107           20        2       3
Sugar Maple     25.1    494.55785   107           20        2       3 
Hemlock         15.1    178.98785   209           30        1       2   

I was trying:

aggregate(.~ Compartment + Stand + Transect + Plot + Tree.Speices, data = Trees, FUN = sum)

but I keep getting this error:

Error in model.frame.default(formula = cbind(DBH, Basal.Area, Transect..,  : 
  variable lengths differ (found for 'Transect')

My variables unique values and there are not all possible combinations in the data.

Compartment: 107 209 310 231
Stand: 20 110  30 240  80 300
Transect: 1 2 3
Plot: 1 2 3 4 5 6

dput:

structure(list(Tree.Speices = structure(c(53L, 49L, 49L, 49L, 
49L, 11L, 49L, 12L, 49L, 4L, 49L, 49L, 49L, 53L, 49L, 49L, 4L, 
4L, 33L, 4L, 11L, 53L, 11L, 53L, 53L, 21L, 21L, 53L, 49L, 53L, 
49L, 49L, 53L, 21L, 4L, 4L, 49L, 12L, 21L, 49L, 49L, 49L, 49L, 
9L, 49L, 49L, 11L, 11L, 53L, 47L, 33L, 11L, 5L, 49L, 11L, 11L, 
38L, 11L, 49L, 11L, 11L, 11L, 11L, 49L, 53L, 53L, 53L, 47L, 49L, 
49L, 49L, 47L, 49L, 33L, 4L, 4L, 47L, 4L, 11L, 49L, 53L, 49L, 
11L, 11L, 11L, 49L, 11L, 11L, 11L, 11L, 11L, 49L, 11L, 49L, 47L, 
49L, 11L, 11L, 11L, 11L, 21L), .Label = c("American Elm", "Aspen", 
"Balsam", "Basswood", "Beech", "Big-Toothed Aspen", "Black Cherry", 
"Cedar", "Cottonwood", "Elm", "Hemlock", "Hop Hornbeam", "paper birch", 
"Paper Birch", "Poplar", "Quaking Aspen", "Red Maple", "Red Oak", 
"Red Spruce", "snag", "Snag", "Snag (Aspen)", "Snag (Basswood)", 
"Snag (Beech)", "Snag (Big-Toothed Aspen)", "SNAG (Big-Toothed Aspen)", 
"snag (conifer)", "Snag (Conifer)", "Snag (Cottonwood)", "Snag (Elm)", 
"Snag (hardwood)", "snag (Hemlock)", "Snag (Hemlock)", "SNAG (Hemlock)", 
"Snag (maple)", "Snag (Maple)", "Snag (Oak)", "Snag (Paper Birch)", 
"Snag (Poplar)", "Snag (Red Maple)", "snag (Sugar Maple)", "Snag (Sugar Maple)", 
"Snag (Sugar)", "Snag (White Ash)", "Snag (White Pine)", "snag (Yellow Birch)", 
"Snag (Yellow Birch)", "SNAG (Yellow Birch)", "Sugar Maple", 
"White Ash", "White Birch", "White Pine", "Yellow Birch"), class = "factor"), 
    DBH = c(55.7, 21.3, 14, 38, 6.5, 20.3, 33.2, 6.3, 30.5, 22.3, 
    32.7, 8.9, 41.8, 30, 24.6, 13.8, 56.6, 49.5, 49.9, 63.2, 
    28, 39, 21, 25.7, 29.9, 38, 17.5, 22.4, 6.2, 20.3, 18.3, 
    21, 24.7, 49.5, 6.4, 30.3, 19.4, 6, 37.8, 24.6, 24.4, 9.5, 
    17.4, 49.2, 26, 31, 23.6, 19.8, 37.9, 25.8, 31.5, 18.1, 34.4, 
    59.7, 28.2, 21, 16.4, 23.7, 34.4, 24.7, 15.4, 12, 24.2, 34.2, 
    19.4, 15.1, 34.9, 34.8, 6.6, 61.2, 25.4, 38.8, 28.9, 32.3, 
    43.9, 33.8, 27.1, 37, 21.2, 26.4, 27.4, 10.6, 55.1, 69.4, 
    24, 25.4, 51, 20.2, 14.3, 31.8, 48.8, 38.3, 19.6, 26.3, 34.5, 
    6.3, 41.3, 32.6, 14.6, 9.1, 57.8), Basal.Area = c(2435.45465, 
    356.14665, 153.86, 1133.54, 33.16625, 323.49065, 865.2584, 
    31.15665, 730.24625, 390.37265, 839.39265, 62.17985, 1371.5834, 
    706.5, 475.0506, 149.4954, 2514.7946, 1923.44625, 1954.65785, 
    3135.4784, 615.44, 1193.985, 346.185, 518.48465, 701.79785, 
    1133.54, 240.40625, 393.8816, 30.1754, 323.49065, 262.88865, 
    346.185, 478.92065, 1923.44625, 32.1536, 720.70065, 295.4426, 
    28.26, 1121.6394, 475.0506, 467.3576, 70.84625, 237.6666, 
    1900.2024, 530.66, 754.385, 437.2136, 307.7514, 1127.58185, 
    522.5274, 778.91625, 257.17385, 928.9376, 2797.81065, 624.2634, 
    346.185, 211.1336, 440.92665, 928.9376, 478.92065, 186.1706, 
    113.04, 459.7274, 918.1674, 295.4426, 178.98785, 956.13785, 
    950.6664, 34.1946, 2940.1704, 506.4506, 1181.7704, 655.63985, 
    818.98265, 1512.85985, 896.8154, 576.51185, 1074.665, 352.8104, 
    547.1136, 589.3466, 88.2026, 2383.26785, 3780.8426, 452.16, 
    506.4506, 2041.785, 320.3114, 160.52465, 793.8234, 1869.4304, 
    1151.50865, 301.5656, 542.97665, 934.34625, 31.15665, 1338.96665, 
    834.2666, 167.3306, 65.00585, 2622.5594), Compartment = c(107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 
    107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L, 107L
    ), Stand = c(20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L), Transect.. = c(2L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Plot.. = c(1L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("Tree.Speices", 
"DBH", "Basal.Area", "Compartment", "Stand", "Transect..", "Plot.."
), row.names = 67:167, class = "data.frame")

The last two column names have two dots at the end and Species is incorrectly spelled:

> names(Trees)
[1] "Tree.Speices" "DBH"          "Basal.Area"   "Compartment"  "Stand"       
[6] "Transect.."   "Plot.."   

Try:

aggregate(.~ Compartment + Stand + Transect.. + Plot.. + Tree.Speices, 
   data = Trees, FUN = sum)

or remove the dots at the end of all names and correct the spelling:

names(Trees) <- sub("\\.+$", "", names(Trees))
names(Trees) <- sub("Speices", "Species", names(Trees))
aggregate(.~ Compartment + Stand + Transect + Plot + Tree.Species, 
   data = Trees, FUN = sum)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM