Добавление нового столбца в data.frame с коэффициентом, зависящим от условий другого data.frame - PullRequest
0 голосов
/ 04 мая 2020

У меня есть 2 разных фрейма данных. Я хочу добавить столбец группировки $ .group к фенологии data.frame в соответствии с условиями, заданными группой data.frame (LEVEL и SPECIES). Я пробовал использовать функцию merge () с помощью by =, но она продолжает давать мне сообщение «Ошибка в fix.by (by.y, y):« by »должен указывать уникально допустимый столбец». Извините, это может показаться очень легкой вещью. Я начинающий ..

    > head(phenology1)
  YEAR GRADIENT               SPECIES ELEVATION SITE TREE_ID CN b_E   b_W   b_M   d_E   d_W d_X   c_E c_W t_max     r_max r_delta_t LEVEL
1 2019        1 Pseudotsuga menziesii       395 B1_D   B1_D1 59 119 135.5 143.0 139.0 148.5 165 258.0 284   154 0.7908536 0.4244604 lower
2 2019        1 Pseudotsuga menziesii       395 B1_D   B1_D2 69 106 127.0 142.0 177.0 173.0 194 283.0 300   156 0.9807529 0.3898305 lower
3 2019        1 Pseudotsuga menziesii       395 B1_D   B1_D3 65  97 125.0 154.5 169.0 174.0 202 266.0 299   167        NA 0.3846154 lower
4 2019        1           Picea abies       405 B1_F   B1_F1 68 162 171.5 182.0 106.5 127.5 137 268.5 299   190        NA 0.6384977 lower
5 2019        1           Picea abies       405 B1_F   B1_F2 78 139 165.5 176.5 152.0 140.5 167 291.0 306   181 0.9410427 0.5131579 lower
6 2019        1           Picea abies       405 B1_F   B1_F3 34 147 177.5 188.0 100.0  97.5 128 247.0 275   187 0.5039245 0.3400000 lower

> grouping
 LEVEL SPECIES               emmean   SE df lower.CL upper.CL .group
 lower Pseudotsuga menziesii    107 8.19 12     89.5      125  1    
 upper Pseudotsuga menziesii    122 8.19 12    103.8      140  12   
 lower Abies alba               128 8.19 12    110.2      146  12   
 upper Abies alba               144 8.19 12    126.7      162  12   
 upper Picea abies              147 8.19 12    129.2      165   2   
 lower Picea abies              149 8.19 12    131.5      167   2   

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

База R с использованием функции сопоставления:

phenology1$.group <- grouping$.group[match(grouping$SPECIES, phenology1$SPECIES) & match(grouping$LEVEL, phenology1$LEVEL)]
0 голосов
/ 04 мая 2020

Вы можете использовать left_join() из пакета dplyr (присоединитесь к phenology1 только с колонками LEVEL, SPECIES и .group из группировки):

library(dplyr)

phenology1 %>% 
  left_join(grouping %>% select(LEVEL, SPECIES, .group))

Это автоматически выбирает одинаковые имена столбцов в обоих фреймах данных для объединения на. Если вы хотите установить их явно, вы можете добавить by = c("LEVEL" = "LEVEL", "SPECIES" = "SPECIES").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...