Как нанести слои кортежей на один и тот же участок в R? - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь построить время и NDVI для каждого региона на одном графике. Я думаю, чтобы сделать это, я должен преобразовать столбец даты из символов во время, а затем построить каждый слой. Однако я не могу понять, как это сделать. Какие-нибудь мысли?

list(structure(list(observation = 1L, HRpcode = NA_character_, 
    timeseries = NA_character_), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame")), structure(list(observation = 1:6, time = c("2014-01-01", 
"2014-02-01", "2014-03-01", "2014-04-01", "2014-05-01", "2014-06-01"
), ` NDVI` = c("0.3793765496776215", "0.21686891782421552", "0.3785652933528299", 
"0.41027240624704164", "0.4035578030242673", "0.341299793064468"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
)), structure(list(observation = 1:6, time = c("2014-01-01", 
"2014-02-01", "2014-03-01", "2014-04-01", "2014-05-01", "2014-06-01"
), ` NDVI` = c("0.4071076986818826", "0.09090719657570319", "0.35214166081795284", 
"0.4444311032927228", "0.5220702877666005", "0.5732370503295022"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
)), structure(list(observation = 1:6, time = c("2014-01-01", 
"2014-02-01", "2014-03-01", "2014-04-01", "2014-05-01", "2014-06-01"
), ` NDVI` = c("0.3412131556625801", "0.18815996897460135", "0.5218904976415136", 
"0.6970128777711452", "0.7229657162729096", "0.535967435470161"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
)))
111

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Сначала нам нужно очистить ваши данные. Первый элемент в этом списке пуст

df = df[-1]

Теперь нам нужно сделать data.frame

df = do.call(rbind, df)

Я собираюсь добавить переменную region, изменить имя NDVI чтобы удалить пробел, замените ndvi на числовой c вектор и замените time на Date объект

library(dplyr)
df = df %>% 
  mutate(region = factor(rep(1:3, rep(6, 3)))) %>% 
  rename(ndvi = ' NDVI') %>% 
  mutate(ndvi = as.numeric(ndvi)) %>% 
  mutate(time = as.Date(time))

Теперь мы можем использовать ggplot2 для построения графика данные по регионам

library(ggplot2)
g = df %>% 
  ggplot(aes(x = time, y = ndvi, col = region)) +
  geom_line()
g

Что дает этот участок:

enter image description here

0 голосов
/ 08 апреля 2020

Вот подход с lubridate для обработки дат и dplyr для облегчения понимания привязки data.frames.

Обратите внимание, что имена групп взяты из имен списка, и поскольку их нет в предоставленных вами данных, мы должны установить их заранее.

library(lubridate)
library(ggplot2)
library(dplyr)
names(data) <- 1:3
data <- bind_rows(data, .id = "group")
data$time <- ymd(data$time)
setnames(data," NDVI","NDVI")
data$NDVI <- as.numeric(data$NDVI)
ggplot(data, aes(x=time,y=NDVI,color=Group)) + geom_line()

enter image description here

...