Почему моя функция построения графика роста во времени не работает? - PullRequest
0 голосов
/ 08 июля 2020

Я хочу создать функцию, которая отображает рост (или покров, как описано в наборе данных) видов растений внутри графика с течением времени. Другими словами, я хочу построить график даты перекрытия для одного вида на одном графике с течением времени.

Вот пример набора данных:

Site Date        Plot Species Cover 
mbs  2020-04-05  A1   Cest    2
mbs  2020-05-05  A1   Cest    10
mbs  2020-06-05  A1   Cest    15
mbs  2020-07-05  A1   Cest    20
mbs  2020-08-05  A1   Cest    16
mbs  2020-04-05  A3   Frve    1
mbs  2020-05-05  A3   Frve    5
mbs  2020-06-05  A3   Frve    10
mbs  2020-07-05  A3   Frve    12
mbs  2020-08-05  A3   Frve    10

Вот также моя попытка сделать мой фактический воспроизводимый набор данных:

dput(PlantComp[3000:3040, c(1, 2, 4, 5, 6)])
structure(list(Site = c("umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs"), Date = structure(c(18417, 18417, 
18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 
18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 
18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 
18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 18417, 
18417, 18417, 18417), class = "Date"), Plot = c("B4", "B4", "B4", 
"B4", "B4", "B4", "B4", "B4", "B4", "B5", "B5", "B5", "B5", "B5", 
"B5", "B5", "B6", "B6", "B6", "B6", "B6", "B6", "B6", "B6", "B6", 
"C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", 
"C2", "C2", "C2", "C2", "C2"), Species = c("Cest", "Poco", "Popr", 
"Ruac", "Litter", "Umsp", "Ulsp", "Vert_Litter", "Ptaq", "Cest", 
"Poco", "Popr", "Litter", "Bare_Ground", "Umsp", "Vert_Litter", 
"Cape", "Cest", "Dasp", "Hype", "Poco", "Litter", "Vert_Litter", 
"Ulsp", "Ptaq", "Cest", "Dasp", "Hype", "Popr", "Ruac", "Litter", 
"Umsp", "Vert_Litter", "Ulsp", "Bare_Ground", "Vear", "Cape", 
"Cest", "Dasp", "Hype", "Popr"), Cover = c(6L, 1L, 3L, 3L, 78L, 
5L, 1L, 1L, 1L, 16L, 3L, 7L, 76L, 2L, 7L, 1L, 1L, 13L, 8L, 1L, 
4L, 79L, 1L, 3L, 1L, 15L, 1L, 1L, 5L, 6L, 68L, 3L, 2L, 3L, 3L, 
1L, 1L, 19L, 2L, 1L, 3L)), row.names = 3000:3040, class = "data.frame")

Я сделал это и для столбца даты:

PlantComp$Date <- as.Date(PlantComp$Date,
                          format = "%m/%d/%y")

Это код, который я пытался написать в R, чтобы создать желаемый функция:

perc_cover_plot <- function(Species, Plot) { 
        PlantCompSub <- filter(PlantComp, Species == Species & Plot == Plot) 
        return(plot(Cover ~ Date, data = PlantCompSub))
} 

Когда я вызываю функцию perc_cover_plot <- (Cest, A1), я получаю график . Кажется, я получаю один и тот же график, независимо от того, какой вид или участок я ввел в функцию.

Я также пробовал использовать трубопровод, чтобы получить желаемый результат:

perc_cover_plot2 <- function (Species, Plot) {
        PlantComp %>% 
        filter(Species == Species & Plot == Plot) %>% 
        plot(Cover ~ Date)
}

Я ищу для создания базового c линейного графика - что-то похожее на this .

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Это еще одна проблема определения переменных с одинаковыми именами в разных средах. Самый простой способ обойти это - внутреннее переименовать переменные перед применением фильтра. Пример:

PlantComp <- read.table(text="Site Date Plot Species Cover
mbs 2020-04-05 A1 Cest 2
mbs 2020-05-05 A1 Cest 10
mbs 2020-06-05 A1 Cest 15
mbs 2020-07-05 A1 Cest 20
mbs 2020-08-05 A1 Cest 16
mbs 2020-04-05 A3 Frve 2
mbs 2020-05-05 A3 Frve 10
mbs 2020-06-05 A3 Frve 15
mbs 2020-07-05 A3 Frve 20
mbs 2020-08-05 A3 Frve 33", header=TRUE, sep=" ") 

PlantComp$Date <- as.Date(PlantComp$Date, '%Y-%d-%m')

perc_cover_plot <- function(Species, Plot) { 
    sp <- Species
    pl <- Plot
    PlantCompSub <- subset(PlantComp, Species == sp & Plot == pl)
    return(plot(Cover ~ Date, data = PlantCompSub))
} 

perc_cover_plot("Cest", "A1")

perc_cover_plot("Frve", "A3")

Created on 2020-07-08 by the представленный пакет (v0.3.0)

0 голосов
/ 08 июля 2020

Вы можете попробовать это:

PlantComp$Date <- as.Date(PlantComp$Date,'%Y-%d-%m')
#Function
perc_cover_plot <- function(x,Species, Plot) { 
  PlantCompSub <- dplyr::filter(x, Species == Species & Plot == Plot) 
  return(plot(Cover ~ Date, data = PlantCompSub))
} 

perc_cover_plot(PlantComp,Species = 'Cest',Plot = 'A1')
perc_cover_plot(PlantComp,Species = 'Frve',Plot = 'A3')

Я действительно заметил, что вы получаете тот же график, потому что у вас те же значения в Cover, конечно, используя ваши демонстрационные данные. Ваш реальный фрейм данных должен иметь разные значения.

...