Hallo bigben,
erstmal vielen Dank für die Rückmeldung und die Nachsicht mit mir. Ich muss ausdrücklich entschuldigen, kein komplett nachvollziehbares Beispiel angefügt zu haben. Das ist natürlich eine unerlässliche Voraussetzung! Steht auch überall!!!!
Also nochmal ganz von vorn:
Gut dass ich in der Vorbereitung des scripts hierfür nochmal ein bisschen nachdenken konnte über das was ich will und das was ich bis jetzt als Ergebnis habe.
Kurz gesagt für die Arbeitsgruppe will ich in shiny in script erstellen, was es uns zum Anfang erlaubt schneller an die Plots (Deskriptive Statistik), später auch multivariate Statistik zu kommen. Herfür habe ich eine Beispiel Datei (df) angehängt.
Das Ziel ist z. Bsp. einen Boxplot oder Histogramm für jeden Horizont einzeln getrennt nach Element ausweisen zu können. Zum Beispiel um Elemente über einzelne Horizonte zu vergleichen.
Geht man über dplyr und ggplot ist es ziemlich einfach.
Code: Alles auswählen
library(tidyverse)
df%>%
select(Horizont, Element_1, Element_2,Element_3)%>%
reshape2::melt(id.var=c("Horizont"))%>%
rename (Element = variable,
Value = value)%>%
filter(Horizont == "Horizont B")%>%
ggplot(aes(x = "", y= Value)) +
geom_boxplot(notch = TRUE, color = "#e9ecef", fill="#69b3a2", outlier.colour = "red", width = 0.6)+
stat_summary(fun = "mean", color = "black", shape = 8) +
geom_jitter(alpha = 0.8, width = 0.2, height = 0, color = "orange") +
facet_wrap( ~ Element, scales = 'free_y', nrow = 1)+
#coord_flip()+
#ggtitle("Boxplot") +
labs(title = "Boxplot - Horizont 'B'",
subtitle = "Black stars: mean value
Red dots: outlier",
caption = "",
tag = "")+
scale_y_continuous(name ="[wt. %]")+
theme_ipsum() +
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())+
theme(plot.title = element_text(size=15))
Oben die Original Datei und als Ergebnis kommt der Plot! Durch die Umwandlung in eine Lang-Version kann ich in jede gewünschte Richtig filtern!
In shiny funktioniert das nicht! Um dasselbe Ergebnis in shiny zu erzielen, muss ich die rownames erzeugen. Diese dann adressieren in shiny.
Das erzeugen von rownames geht im Beispieldatensatz von mtcars über den Befehl:
Code: Alles auswählen
head(mtcars)
mtcars_tbl <- rownames_to_column(mtcars, var = "car") %>%
as_tibble()%>%
head(); mtcars_tbl
bei meinem Datensatz kommt eine Fehlermeldung:
Code: Alles auswählen
df_tbl <- rownames_to_column(df, var = "Horizont")%>%
as_tibble()%>%
head(); df_tbl
Fehler:
Fehler: Column name `Horizont` must not be duplicated
.
Die Erklärung für diesen Fehler wird in der Literatur beschrieben!
Ich habe aber trotzdem einen Weg gefunden, trotz der Duplikate die rownames zu erstellen:
Code: Alles auswählen
head(df)
# Check is there rowname
has_rownames(df)
# Insert the "Horizont" as row
# first create the matrix
# can be skipped, not entirely necessary - works with a dataframe too
df <- as.matrix(df); df
# set rownames
rownames(df)=paste(c(1:nrow(df)),df[,1]); df # [,1] oder [,10] ist die Spalte welche die Clustername später bilden
# what type of data
class(df)
# back transform to a data frame
# can be skipped, not entirely necessary - works with a dataframe too
df <- as.data.frame(df); df
# Check is there rowname
has_rownames(df)
# rownames contain rowid + rowname in one column or cell
fix(df)
Wenn man jetzt den letzten Befehl anwendet, sieht man sofort, dass in den rownames die rowid + rowname geschrieben wurde. Meine Frage lautet nun; Wie bekomme ich die rowid da wieder raus. Ich komme nicht an diese Information ran.
Auf der anderen Seite habe ich festgestellt, das in shiny jede einzelne Zeil indiziert wird. Doch dazu später. Also nochmal:
Das primäre Ziel ist die oben gezeigte Grafik in shiny darstellen zu lassen. Mit oder ohne rownames....
Ich freue mich über jeden Hilfe und Gedanken um dieses Problem zu lösen.
Vielen Dank!
retep