Как рассчитать новое значение на основе суммы дубликатов номинальных значений в R - PullRequest
1 голос
/ 11 января 2020

У меня есть два столбца данных: один для переменной и один для области, в которой находится переменная.

 veg_dominant  Shape_Area
        Hm1.1   28216.344
  Bp1.2molcae   6509.464
  Bp1.2molcae   43518.162
        Hm1.1   21348.608
        Hm1.1   14529.108
        Hm1.1   18050.676

Я хочу взять сумму Shape_Area для всех veg_dominant, которые такие же. Например, за каждым Hm1.1 я хочу получить сумму всех областей формы, равную Bp1.2molcae, которая будет равна 50027,626. Поэтому я хочу, чтобы это число появилось за обеими строками, которые содержат Bp1.2molcae. То же самое касается Hm1.1. Новый фрейм данных с каждой уникальной переменной и суммой Shape_Area - это то, что я хочу получить go в конце.

Ожидаемый результат для приведенного выше примера:

Veg_dominant      Shape_Area
Hm1.1             82144.736
Bp1.2molcae       50027.626

У меня много строк, но ниже приведен код только головы, как показано в примере выше.

structure(list(veg_dominant = structure(c(59L, 14L, 14L, 59L, 
59L, 59L), .Label = c("", "Bb1.1.1", "bebouwing", "Beuk", "bos", 
"Bp", "Bp1.1", "Bp1.1.1", "Bp1.1.3", "Bp1.1.3loof", "Bp1.1Calluna", 
"Bp1.2", "Bp1.2desflex", "Bp1.2molcae", "Bp1.3", "Bq11.1", "Bq3.2.5", 
"Bq4.1betpin", "Bq4.1querob", "Bq5.2pinbet", "Bq6.1desflex", 
"Bq6.1molcae", "Bq6.2", "Bq6.2molcae", "Bq9", "Bq99.1", "Bq99.2", 
"Bq99.3", "Dd1", "Dd2.1", "Dd2.2", "Dd3", "Dd5.1", "E00", "G01a", 
"G02", "G03", "G04", "G05", "G06", "G07", "Gc04", "Gc1", "Gc2", 
"Gc3", "Gc4", "grasland", "Grasland ", "H01", "H03", "Hc1", "Hc2", 
"Hc3", "Hc3_0", "Hc3_3", "Hc3Cp", "Hc3t", "hm1.1", "Hm1.1", "Hm1.1_3", 
"Hm1.2", "Hp1.1", "Hpc", "Hv", "jeneverbesstruweel", "Oefendorp", 
"open zand", "Open zand", "opslag", "Opslag", "P02", "Sj1.1", 
"weg", "x", "x00", "X00"), class = "factor"), Shape_Area = c(28216.3437, 
6509.46415, 43518.16186, 21348.60848, 14529.10796, 18050.6759
)), row.names = c(NA, 6L), class = "data.frame")

1 Ответ

2 голосов
/ 11 января 2020

Здесь мы можем просто сделать группу по sum

library(dplyr)   
df1 %>% 
  group_by(veg_dominant) %>%
  summarise(Shape_Area = sum(Shape_Area))

Или по base R

aggregate(Shape_Area ~ veg_dominant, df1, sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...