R означает сортировку по группам, построение линейной диаграммы с помощью ggplot

#r #line #mean #diagram

#r #линия #среднее #диаграмма

Вопрос:

У меня есть некоторые данные, подобные этому. В конце будет 20 тренировок.

 Intensitaet.Auswertung <- data_Auswertung [, c("Type", "training1", "training2", "training3", "training4", "training5")] 

    group                   `training1`    `training2`    `training3`    `training4`    `training5`
   <chr>                       <dbl>          <dbl>          <dbl>          <dbl>          <dbl>
 1 Group1                        6              6              4              2              8
 2 Group1                        4              5              5              5              7
 3 Group2                        5              3              3              3              6
 4 Group1                        5              3              4              3              6
 5 Group1                        5              7              8              6              7
 6 Group2                        4              3              4              5              7
 7 Group2                        5              5              5              5              7
 8 Group1                        7              8              6              5              8
 9 Group2                        3              4              4              4              8
10 Group2                        6              5              4              5              4
# ... with 11 more rows
  

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

Я надеюсь, что кто-нибудь сможет мне помочь, я очень новичок в R.

Комментарии:

1. итак, вам нужно среднее значение столбца? если да ergebniss_df<-apply(Intensitaet.Auswertung[,2:length(Intensitaet.Auswertung)], 2, mean) , то это то, что вы ищете

2. я хочу отсортировать среднее значение по группам. Для каждого столбца должно быть 2 числа, группа 1 и Группа2. Так близко, но не правильно

3. ах, я пропустил, что у вас есть 2 группы. не проще ли было бы просто разделить 2 группы на разные df? если вам нужна более конкретная помощь, я бы посоветовал загрузить небольшую часть вашего df. вы можете использовать dput() . тогда мы сможем работать с данными, а не гадать

Ответ №1:

Вы имеете в виду что-то подобное?

 library(tidyverse)
Intensitaet.Auswertung %>% 
    group_by(group) %>% 
    summarise(across(everything(), mean)) %>% 
    pivot_longer(cols = -group, names_to = "training", values_to = "mean") %>% 
    mutate(training = as.numeric(gsub("[^0-9]","",training))) %>% 
    ggplot(aes(x=training, y = mean, group = group, color = group))   
    geom_line()
  

введите описание изображения здесь

Комментарии:

1. да, точно. Если я скопирую эти строки, я получу сообщение об ошибке Fehler: Must group by variables found in .data. * Column group is not found. Run rlang::last_error() to see where the error occurred.

2. я понял, это было что-то с большими буквами в xlsx

Ответ №2:

есть способы сделать это, но я не могу сказать наверняка, не пытаясь возиться с этим минуту или 2. здесь есть люди, которые могут, но обычно предпочтительнее работать с небольшим воспроизводимым df из op. вы могли бы использовать mutate() команду из dplyr / tidyverse или вы могли бы использовать функцию apply () с отдельной функцией внутри, например:

df<-apply(your_data, 2, function(x) if (your_data[,1]=="Group1") {mean} else {mean}) но я понятия не имею, работает ли это без предварительного тестирования. вы также можете использовать which() команду или тому ifelse() подобное, чтобы:

df<-ifelse(your_data[,1]=="Group1", mean(yourdata[,2:length(your_data)]), mean(yourdata[,2:length(your_data)]))

но опять же, не знаю, работает ли это без попыток / манипуляций

Комментарии:

1. мой исходный файл представляет собой данные xlsx, я создал переменную data_auswertung из этого xlsx. Я пытался dput(data_auswertung) , dput(Intensitaet.Auswertung) но я перешел к новому в R, чтобы решить эту проблему. Я хочу предоставить вам данные, чтобы вы могли попробовать, как вы сказали

2. чтобы создать воспроизводимую часть ваших данных, это хорошо работает: f<-dput(head(Intensitaet.Auswertung)) write.csv(f, file="C:/...../test")

3. вам не нужно загружать ее, после dput () вы можете просто скопировать и вставить результат, который вы найдете в своей R-консоли, в свой вопрос в виде обычного текста

Ответ №3:

Тест
Intensitaet.Auswertung %>%
group_by(group) %>%
summarise(across(everything(), mean)) %>%
pivot_longer(cols = -group, names_to = "training", values_to = "mean") %>%
mutate(training = as.numeric(gsub("[^0-9]","",training))) %>%
ggplot(aes(x=training, y = mean, group = group, color = group))
geom_line()
scale_colour_manual(values = c("lightskyblue", "royalblue"), name = "Legende")
ggtitle("Persönliches Intensitäslevel pro Training sortiert nach Gruppen")
theme_bw()
theme(axis.text.x = element_text(size = 12))
theme(axis.title.y = element_text(size = 15, angle = 90))
theme(axis.text.y = element_text(size = 12, hjust=1))
theme(axis.title.x = element_text(size = 15))
scale_y_continuous(name = "Intensität", breaks = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
theme(plot.title = element_text(hjust = 0.5))

Теперь у меня есть этот хороший линейный график. Я хочу изменить x на любой заголовок оси y и разрывы на оси x.

Комментарии:

1. получил это с помощью scale_x...