Группировать данные для диаграммы

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Группировать данные для диаграммы

Сообщение VistaSV30 » 05 окт 2020, 10:43

Добрый день!
Дана таблица df.
Подскажите, пожалуйста, как перегруппировать данные в таблице или может быть как-то по другому прописать параметры ggplot, чтобы на диаграмме отображались все показатели V1, V2 и V3

Код: Выделить всё

df <- data.frame(
  Yr=sample(2016:2020, 20, replace = T),
  V1=sample(10:99, 20, replace = T),
  V2=sample(10:99, 20, replace = T),
  V3=sample(10:99, 20, replace = T)
  )
head(df)

library(ggplot2), library(dplyr)

df %>% group_by(Yr) %>% summarise(N=mean(V1)) %>%
  ggplot(., aes(x=Yr,y=N)) + geom_line()
Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Группировать данные для диаграммы

Сообщение VistaSV30 » 05 окт 2020, 12:03

С нуля создал "длинную" таблицу.
Так всё получается. Теперь надо снова попробовать переделать "широкую" таблицу в "длинную"

Код: Выделить всё

df <- data.frame(
  Yr=sample(2016:2020, 80, replace = T),
  Nm=LETTERS[sample(1:5, 80, replace = T)],
  V=sample(10:99, 80, replace = T)
  )

df %>% group_by(Yr, Nm) %>% 
  summarise(N=mean(V)) %>%
  ggplot(., aes(x=Yr,y=N, group=Nm)) +
  geom_smooth() + 
  geom_point(col="blue4", fill="white", size=2, shape = 21)
Вариант с аннотациями на выносках

Код: Выделить всё

df1 <- df %>% group_by(Yr, Nm) %>% 
  summarise(N=mean(V)) 

df1 %>% group_by(Yr, Nm) %>% 
  mutate(label = ifelse(Yr == max(df1$Yr), Nm, NA)) %>% # Вместе с summarise - НЕ РАБОТАЕТ!
   ggplot(., aes(x=Yr,y=N, group=Nm)) +
   geom_smooth() +
   geom_point(col="blue4", fill="white", size=2, shape = 21) +
  geom_text_repel(aes(label=label),
    size = 3, nudge_x = 50,
    segment.size = 0.4,
    segment.color = "gray60",
    point.padding = 0.2,
    arrow = arrow(length = unit(0.01, "npc"), type = "open", ends = "last"), # first
    force = 5, na.rm = TRUE
  )
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Группировать данные для диаграммы

Сообщение VistaSV30 » 05 окт 2020, 19:45

Пока решение такое:

Код: Выделить всё

df <- data.frame(
  Yr=sample(2016:2020, 20, replace = T),
  V1=sample(10:99, 20, replace = T),
  V2=sample(10:99, 20, replace = T),
  V3=sample(10:99, 20, replace = T)
  )

library(ggplot2); library(dplyr)

df1 <-data.frame(Yr=NA, V=NA, Nm=NA)
for (i in 2:4) {
 a <-  df[c(1,i)]
 a$Nm <- names(df[i])
 names(a) <- c("Yr", "V", "Nm")
 df1 <- rbind(df1, a)
}
df1 <- df1[-1,]

df1 %>% group_by(Yr, Nm) %>% 
  summarise(N=mean(V)) %>%
  ggplot(., aes(x=Yr,y=N, group=Nm)) +
  geom_smooth()
Не нравится мне здесь цикл, но пока лучше не получается.
Еще нашел в чем у меня была ошибка. В строке - summarise(N=mean(V)) %>% не было второй скобки после V
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя