Создать новый столбец, в котором перечислены имена столбцов, содержащих значения, превышающие определенное число - PullRequest
1 голос
/ 21 февраля 2020

Так что я работаю над кодом, связанным с восстановлением местных видов. К концу этого фрагмента кода у меня есть столбец с именем «count_species_greater_5», в котором подсчитывается количество нативных видов, появившихся как минимум 5 раз за polygon_ID. Далее я хочу перечислить эти виды (которые являются именами столбцов) в новом столбце. См. Таблицу ниже, чтобы узнать, как будет выглядеть столбец (сделано в Excel, «# Species ≥ 5%» совпадает с моим столбцом «count_species_greater_5», «Species ≥ 5%» - это то, что я пытаюсь воссоздать в R). Как мне получить этот последний столбец, в котором будут перечислены названия видов с более чем 5 попаданиями?

Обратите внимание, мой код приведен ниже, и я знаю, что это не самый гладкий или чистый код, но он пока работает для достижения моих целей. Кроме того, по некоторым причинам rowums рассматривал «polygon_id» как число и добавлял его в итог для столбца видов> 5, поэтому я использовал «as.factor», чтобы он не учитывался, но я не уверен, что это был правильный подход, хотя он работал, чтобы получить результаты, которые я хотел. Я с радостью приму любой совет по поводу лучшего способа сделать это или лучшего способа кодирования любого из этого. Спасибо!

Я относительно новичок в этом, и, хотя я гуглил это, я не мог понять, как прикрепить свои данные, я действительно смотрел на эту ссылку , но я не понял этого , Я не знаю, возможно ли ответить на этот вопрос без моих данных, поэтому, если у кого-то есть совет, как загрузить CSV, дайте мне знать.

enter image description here


AC_OCWR_Data <- read_excel("AC_OCWR_Data.xlsx")
data <- clean_names(AC_OCWR_Data)

diversity1 <- ac_data %>%
  dplyr::filter(data_type == "T.PI") %>%
  select(transect, polygon_id, native_non_native, species_code) %>% 
  group_by(polygon_id, transect, native_non_native) %>% 
  count(species_code) 

colnames(diversity1)[5] <- c("total") 
diversity1$perc_cover <- diversity1$total/50*100


diversity1_native <- diversity1 %>% 
  dplyr::filter(native_non_native == "Native")

diversity2 = dcast(diversity1_native, polygon_id + transect ~ species_code, value.var = "perc_cover")
diversity2 <- aggregate(diversity2[3:45],list(diversity2$polygon_id), mean, na.rm=TRUE)
names(diversity2)[1]<-paste("polygon_id")
diversity2$polygon_id <- as.factor(diversity2$polygon_id) 
diversity2 <- diversity2 %>% 
  mutate(count_species_greater_5 = rowSums(diversity2 > 5, na.rm = TRUE)) 

View(diversity2)

Разнообразие2 выглядит следующим образом: enter image description here

по предложению Майка, здесь это разнесение 2 вывод:

structure(list(polygon_id = structure(1:13, .Label = c("5M BUFFER", 
"OW-M1", "OW-M2", "OW-M3", "OW-M4", "OW-M5", "OW-M7", "OW-U1", 
"OW-U11", "OW-U2", "OW-U3", "OW-U6", "Weedy Control"), class = "factor"), 
    ACMGLA = c(2, NaN, 2, NaN, NaN, NaN, NaN, 2, NaN, 2, 2, 2, 
    4), AMBPSI = c(NaN, NaN, 2, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN), AMSMEN = c(2, 2, NaN, NaN, NaN, NaN, 
    8, NaN, NaN, NaN, NaN, NaN, NaN), ARTCAL = c(26, 12, 6, 8, 
    6, NaN, 4, NaN, 4, 2, 12, 38, 4), ARTDOU = c(2, 6, 2, 2, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), ARTDRA = c(11.3333333333333, 
    34, 18, 62, NaN, 12, NaN, 14, 12, 34, 26, NaN, 32), ATRCAN = c(NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 6), 
    BACSAL = c(4, NaN, NaN, 4, NaN, 12, 12, 34, 22, NaN, NaN, 
    NaN, 14.6666666666667), CALMAC = c(4, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), CORRIG = c(NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, 6, NaN, NaN, NaN, NaN), 
    CROCAL = c(NaN, NaN, NaN, 2, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN), CRYINT = c(NaN, 6, NaN, NaN, NaN, NaN, 4, 
    NaN, NaN, NaN, NaN, NaN, NaN), CUCFOE = c(NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 2), DEIFAS = c(6, 
    2, NaN, NaN, NaN, NaN, 32, NaN, NaN, NaN, NaN, NaN, NaN), 
    DIPAUR = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, 2, NaN), ELYCON = c(NaN, NaN, NaN, NaN, 2, NaN, 16, 
    NaN, NaN, NaN, 36, NaN, NaN), ENCCAL = c(NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, 8, 12, NaN, 4), ERIFAS = c(44, 16, 
    50, 26, 58, 62, 32, 22, 20, 74, 14, 42, NaN), ESCCAL = c(NaN, 
    6, 2, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), 
    EUCCHR = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    2, 2, NaN), EUCCRY = c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    2, NaN, 2, NaN, NaN, NaN), GALANG = c(2, NaN, 4, NaN, NaN, 
    2, NaN, NaN, NaN, 2, NaN, 2, NaN), GALAPA = c(NaN, NaN, NaN, 
    2, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), HELANN = c(NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 2, NaN, NaN), 
    ISOMEN = c(8, NaN, NaN, NaN, NaN, NaN, 4, NaN, NaN, NaN, 
    4, 10, NaN), MALFAS = c(16, 4, NaN, NaN, 10, 6, 8, NaN, 2, 
    NaN, NaN, 2, NaN), MALLAU = c(12, NaN, NaN, NaN, 2, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN), MALSAX = c(4, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN), MARMAC = c(NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 3), 
    OPULIT = c(NaN, NaN, NaN, NaN, NaN, NaN, 8, NaN, NaN, NaN, 
    4, NaN, NaN), PHACIC = c(14, 26, 42, NaN, NaN, 6, NaN, 8, 
    NaN, 4, 6, NaN, NaN), PHAPAR = c(NaN, NaN, 2, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, 4, NaN, NaN), QUEARG = c(NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 32, NaN), RAFCAL = c(2, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN
    ), RHUINT = c(6, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN), SALLAE = c(NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, 8), SALMEL = c(NaN, NaN, 
    NaN, 10, 4, 2, 8, 2, 12, NaN, 10, 12, 10), SAMNIG = c(NaN, 
    8, 40, NaN, 8, 6, NaN, 10, 6, NaN, 2, NaN, NaN), SOLDOU = c(NaN, 
    NaN, 4, NaN, NaN, NaN, NaN, 4, NaN, NaN, NaN, NaN, NaN), 
    SOLSPP = c(2, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN), STIPUL = c(4, NaN, NaN, NaN, NaN, NaN, NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN), TOXDIV = c(NaN, NaN, NaN, 
    NaN, NaN, NaN, 4, NaN, NaN, NaN, NaN, NaN, NaN), XANSTR = c(NaN, 
    NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 2), 
    count_species_greater_5 = c(9, 8, 5, 4, 4, 6, 8, 5, 6, 3, 
    7, 5, 5)), class = "data.frame", row.names = c(NA, -13L))

1 Ответ

1 голос
/ 22 февраля 2020

Мы можем повернуть в «длинный» формат, а затем filter names на основе частоты значений

library(dplyr)
library(tidyr)
diversity2 %>%
    select(-count_species_greater_5) %>%
    pivot_longer(cols = - polygon_id, values_drop_na = TRUE) %>% 
    filter(value >= 5) %>%          
    group_by(polygon_id) %>% 
    summarise(species_name = toString(name), 
              count_species_greater_5 = n())
# A tibble: 13 x 3
#   polygon_id    species_name                                                           count_species_greater_5
#   <fct>         <chr>                                                                                    <int>
# 1 5M BUFFER     ARTCAL, ARTDRA, DEIFAS, ERIFAS, ISOMEN, MALFAS, MALLAU, PHACIC, RHUINT                       9
# 2 OW-M1         ARTCAL, ARTDOU, ARTDRA, CRYINT, ERIFAS, ESCCAL, PHACIC, SAMNIG                               8
# 3 OW-M2         ARTCAL, ARTDRA, ERIFAS, PHACIC, SAMNIG                                                       5
# 4 OW-M3         ARTCAL, ARTDRA, ERIFAS, SALMEL                                                               4
# 5 OW-M4         ARTCAL, ERIFAS, MALFAS, SAMNIG                                                               4
# 6 OW-M5         ARTDRA, BACSAL, ERIFAS, MALFAS, PHACIC, SAMNIG                                               6
# 7 OW-M7         AMSMEN, BACSAL, DEIFAS, ELYCON, ERIFAS, MALFAS, OPULIT, SALMEL                               8
# 8 OW-U1         ARTDRA, BACSAL, ERIFAS, PHACIC, SAMNIG                                                       5
# 9 OW-U11        ARTDRA, BACSAL, CORRIG, ERIFAS, SALMEL, SAMNIG                                               6
#10 OW-U2         ARTDRA, ENCCAL, ERIFAS                                                                       3
#11 OW-U3         ARTCAL, ARTDRA, ELYCON, ENCCAL, ERIFAS, PHACIC, SALMEL                                       7
#12 OW-U6         ARTCAL, ERIFAS, ISOMEN, QUEARG, SALMEL                                                       5
#13 Weedy Control ARTDRA, ATRCAN, BACSAL, SALLAE, SALMEL                                                       5

ПРИМЕЧАНИЕ. Если эти столбцы необходимо добавить обратно в исходный набор данных, либо выполните bind_cols с помощью select интересующих столбцов, либо left_join с 'polygon_id' в виде by column

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