HILFE! Subset auf eingelesene Daten funktioniert nicht!!
HILFE! Subset auf eingelesene Daten funktioniert nicht!!
Hallo zusammen,
bin ein R-Neuling und mir will einfach nichts wirklich gelingen. Brauche dringend Hilfe!!
Hab eine Exceldatei mit 30 Spalen und ca. 5800 Zeilen
a <- read.csv("C:\\[...], header=FALSE, sep=";", row.names=NULL)
## wenn ich length(df.tickets) eingebe kommt nur 30 heraus, warum?? Das ist whsl. die Anzahl der Spalten, wie gibt er mir die Anzahl der Zeilen aus?
subset(df.tickets, df.tickets$CompanyID == 241)
## ich will alle infos zum unternehmen mit der CompanyID 241, da kommt dann diese Meldung: <0 Zeilen> (oder row.names mit Länge 0)
df.tickets$BC <- as.numeric(as.character(df.tickets$BC)
## hier sollen die Werte in der Spalte mit der Überschrift "BC" in numerische Werte übertragen werden, aber es kommt nur die Meldung
replacement has 0 rows, data has 5878
Würde mich über hilfreiche Antworten freuen
Gruß
bin ein R-Neuling und mir will einfach nichts wirklich gelingen. Brauche dringend Hilfe!!
Hab eine Exceldatei mit 30 Spalen und ca. 5800 Zeilen
a <- read.csv("C:\\[...], header=FALSE, sep=";", row.names=NULL)
## wenn ich length(df.tickets) eingebe kommt nur 30 heraus, warum?? Das ist whsl. die Anzahl der Spalten, wie gibt er mir die Anzahl der Zeilen aus?
subset(df.tickets, df.tickets$CompanyID == 241)
## ich will alle infos zum unternehmen mit der CompanyID 241, da kommt dann diese Meldung: <0 Zeilen> (oder row.names mit Länge 0)
df.tickets$BC <- as.numeric(as.character(df.tickets$BC)
## hier sollen die Werte in der Spalte mit der Überschrift "BC" in numerische Werte übertragen werden, aber es kommt nur die Meldung
replacement has 0 rows, data has 5878
Würde mich über hilfreiche Antworten freuen
Gruß
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
Hallo seraphin,
willkommen im Forum!
Die wichtigsten Informationen liefert die Funktion str(), also:
Wenn Du die Informationen in Deiner nächsten Nachricht schickst, steigt die Wahrscheinlichkeit für konkrete Hilfe ganz enorm.
Gruß, Jörg
willkommen im Forum!
Weiter unten schreibst Du immer von einem Objekt df.tickets; meintest Du hierseraphin12345 hat geschrieben: ↑Fr Aug 03, 2018 10:25 am Hab eine Exceldatei mit 30 Spalen und ca. 5800 Zeilen
a <- read.csv("C:\\[...], header=FALSE, sep=";", row.names=NULL)
Code: Alles auswählen
df.tickets <- read.csv("C:\\[...], header=FALSE, sep=";", row.names=NULL)
genau: ein Dataframe ist eine Liste. Die Länge einer Liste ist die Anzahl der Elemente, also erhältst Du bei einem Dataframe die Anzahl der Spalten.## wenn ich length(df.tickets) eingebe kommt nur 30 heraus, warum?? Das ist whsl. die Anzahl der Spalten, wie gibt er mir die Anzahl der Zeilen aus?
Die wichtigsten Informationen liefert die Funktion str(), also:
Code: Alles auswählen
str(df.tickets)
Auch für uns sind für die Diagnose die Informationen aus str(df.tickets) wichtig.Code: Alles auswählen
subset(df.tickets, df.tickets$CompanyID == 241) ## ich will alle infos zum unternehmen mit der CompanyID 241, da kommt dann diese Meldung: <0 Zeilen> (oder row.names mit Länge 0) df.tickets$BC <- as.numeric(as.character(df.tickets$BC) ## hier sollen die Werte in der Spalte mit der Überschrift "BC" in numerische Werte übertragen werden, aber es kommt nur die Meldung replacement has 0 rows, data has 5878
Wenn Du die Informationen in Deiner nächsten Nachricht schickst, steigt die Wahrscheinlichkeit für konkrete Hilfe ganz enorm.
Gruß, Jörg
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
Hi Jörg, danke für die Antwort,
ja sorry, das "a" hatte ich bereits entfernt und durch df.tickets ersetzt
schon mal danke im voraus
mit der Funktion str(df.tickets) kommt folgendes heraus:
data.frame': 0 obs. of 31 variables:
$ TicketID : int
$ CompanyID : int
$ Company : Factor w/ 1436 levels " ...
$ TicketType : Factor w/ 10 levels "...
$ ExistingCustomer : Factor w/ 3 levels "","...
$ CustomerType : Factor w/ 2 levels "Carrier","Shipper":
$ Ticket.status : Factor w/ 15 levels "...
$ OPP.ID : int
$ Short.description : Factor w/ 5208 levels "","...
$ KAM : Factor w/ 139 levels "","...
$ Maintenance.fees : Factor w/ 219 levels "","0","0,1","100",..:
$ Project.Team : Factor w/ 22 levels "","Business Consulting",..:
$ Priority : Factor w/ 5 levels "","Not assigned",..:
$ Assignment.status : Factor w/ 4 levels "","Effort Estimation",..:
$ Order.received. : Factor w/ 4 levels "","no","not needed",..:
$ PO.received..clean.order.. : Factor w/ 2 levels "no","yes":
$ Expected.transactions.filled....30K..turnover....new.customer: Factor w/ 2 levels "no","yes":
$ Carrier.list. : Factor w/ 4 levels "","no","not needed",..:
$ Carrier.integration.required : Factor w/ 3 levels "","no","yes":
$ CC.Date : Factor w/ 271 levels "","01.02.2016",..:
$ Comment : Factor w/ 706 levels "","\n","...",..:
$ BC : num
$ NTO : num
$ TV : num
$ TSM : num
$ First..timestamp : Factor w/ 1258 levels "01.01.2017","01.01.2018",..:
$ Last..timestamp : Factor w/ 602 levels "01.02.2016","01.02.2018",..:
$ RSM : Factor w/ 10 levels "","-","#N/A",..:
$ Open.Invoices : Factor w/ 3 levels "","#VALUE!","0,00 \200":
$ Turnover : Factor w/ 352 levels "","0","10252",..:
$ trans_value_month : num
ja sorry, das "a" hatte ich bereits entfernt und durch df.tickets ersetzt
schon mal danke im voraus
mit der Funktion str(df.tickets) kommt folgendes heraus:
data.frame': 0 obs. of 31 variables:
$ TicketID : int
$ CompanyID : int
$ Company : Factor w/ 1436 levels " ...
$ TicketType : Factor w/ 10 levels "...
$ ExistingCustomer : Factor w/ 3 levels "","...
$ CustomerType : Factor w/ 2 levels "Carrier","Shipper":
$ Ticket.status : Factor w/ 15 levels "...
$ OPP.ID : int
$ Short.description : Factor w/ 5208 levels "","...
$ KAM : Factor w/ 139 levels "","...
$ Maintenance.fees : Factor w/ 219 levels "","0","0,1","100",..:
$ Project.Team : Factor w/ 22 levels "","Business Consulting",..:
$ Priority : Factor w/ 5 levels "","Not assigned",..:
$ Assignment.status : Factor w/ 4 levels "","Effort Estimation",..:
$ Order.received. : Factor w/ 4 levels "","no","not needed",..:
$ PO.received..clean.order.. : Factor w/ 2 levels "no","yes":
$ Expected.transactions.filled....30K..turnover....new.customer: Factor w/ 2 levels "no","yes":
$ Carrier.list. : Factor w/ 4 levels "","no","not needed",..:
$ Carrier.integration.required : Factor w/ 3 levels "","no","yes":
$ CC.Date : Factor w/ 271 levels "","01.02.2016",..:
$ Comment : Factor w/ 706 levels "","\n","...",..:
$ BC : num
$ NTO : num
$ TV : num
$ TSM : num
$ First..timestamp : Factor w/ 1258 levels "01.01.2017","01.01.2018",..:
$ Last..timestamp : Factor w/ 602 levels "01.02.2016","01.02.2018",..:
$ RSM : Factor w/ 10 levels "","-","#N/A",..:
$ Open.Invoices : Factor w/ 3 levels "","#VALUE!","0,00 \200":
$ Turnover : Factor w/ 352 levels "","0","10252",..:
$ trans_value_month : num
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
Das ist wirklich sehr merkwürdig. Wenn df.tickets mit dem Argument "header = FALSE" eingelesen wurde, woher weiß es dann, wie die Spalten heißen sollen? Ich glaube, Du hast da irgenwelche alten Variablen in Deinem R herumliegen und kommst jetzt mit irgendwelchen Tippfehlern durcheinander.
Bitte lösche df.tickets mit aus Deinem Speicher und lese es dann erneut mit ein. Sollte dabei eine Fehlermeldung auftreten, dann bitte diese Fehlermeldung anzeigen, ansonsten nochmal
Dabei dann bitte code-Tags verwenden: viewtopic.php?f=20&t=29
Wenn es dann nochmal passiert, brauchen wir ein funktionierendes Minimalbeispiel, also eine Datei, die keinesfalls Deine ganzen Daten enthalten muss, aber mit der sich der Fehler reproduzieren lässt. Du könntest beispielsweise Deine CSV-Datei im Texteditor aufrufen und die meisten Zeilen daraus löschen, um so eine Beispieldatei zu erhalten.
LG,
Bernhard
Bitte lösche df.tickets mit
Code: Alles auswählen
rm(df.tickets)
Code: Alles auswählen
df.tickets <- read.csv("C:\\[...], header=FALSE, sep=";")
Code: Alles auswählen
str(df.tickets)
Wenn es dann nochmal passiert, brauchen wir ein funktionierendes Minimalbeispiel, also eine Datei, die keinesfalls Deine ganzen Daten enthalten muss, aber mit der sich der Fehler reproduzieren lässt. Du könntest beispielsweise Deine CSV-Datei im Texteditor aufrufen und die meisten Zeilen daraus löschen, um so eine Beispieldatei zu erhalten.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
Hallo seraphin,
Habe ich das richtig verstanden, dass der Ursprung eine Excel-Datei ist? Wenn ja: man kann Excel-Dateien auch direkt einlesen.
z.B.
Ob man das so will, muss man selbst entscheiden.
Gruß, Jörg
o.k.seraphin12345 hat geschrieben: ↑Fr Aug 03, 2018 11:13 am ja sorry, das "a" hatte ich bereits entfernt und durch df.tickets ersetzt
Und das ist das Ergebnis direkt nach dem Einlesen? Wenn ja, dann ist da wirklich einiges schief gegangen.mit der Funktion str(df.tickets) kommt folgendes heraus:
data.frame': 0 obs. of 31 variables:
...
Habe ich das richtig verstanden, dass der Ursprung eine Excel-Datei ist? Wenn ja: man kann Excel-Dateien auch direkt einlesen.
z.B.
Code: Alles auswählen
library(readxl)
df.tickets <- read_excel("... .xlsx", sheet = "...")
Die read.table()-Funktionen wandeln Zeichenkette in Faktoren. Mit stringsAsFactors = FALSE kann man das unterbinden.$ TicketID : int
$ CompanyID : int
$ Company : Factor w/ 1436 levels " ...
$ TicketType : Factor w/ 10 levels "...
$ ExistingCustomer : Factor w/ 3 levels "","...
$ CustomerType : Factor w/ 2 levels "Carrier","Shipper":
$ Ticket.status : Factor w/ 15 levels "...
$ OPP.ID : int
$ Short.description : Factor w/ 5208 levels "","...
$ KAM : Factor w/ 139 levels "","...
Ob man das so will, muss man selbst entscheiden.
Das sieht komisch aus, eventuell hätte man dec="," setzen sollen$ Maintenance.fees : Factor w/ 219 levels "","0","0,1","100",..:
Datumswerte wird man ohnehin nochmal umwandeln müssen, wenn man sie richtig nutzen will.$ CC.Date : Factor w/ 271 levels "","01.02.2016",..:
...
$ First..timestamp : Factor w/ 1258 levels "01.01.2017","01.01.2018",..:
$ Last..timestamp : Factor w/ 602 levels "01.02.2016","01.02.2018",..:
Dies soll bestimmt nicht so sein.$ Open.Invoices : Factor w/ 3 levels "","#VALUE!","0,00 \200":
auch hier gibt es Schwierigkeiten.$ Turnover : Factor w/ 352 levels "","0","10252",..:
o.k.$ trans_value_month : num
Gruß, Jörg
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
kannst du mir noch bei der folgenden Funktion helfen? Hier soll anscheinend ein Hyperlink mit der TicketID zusammengefügt werden
gibt die Fehlermeldung aus:
Viele Grüße
Code: Alles auswählen
df.tickets$url_ticket<-paste0("=HYPERLINK(","\"https://.../",df.tickets$Ticket.ID,"\"",")")
Code: Alles auswählen
Fehler in `$<-.data.frame`(`*tmp*`, url_ticket, value = "https://.../df.tickets$Ticket.ID") :
replacement has 1 row, data has 0
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
letzte frage kannst du erst mal ignorieren.
ich bin voll am arsch
Die Excel habe ich als csv Datei neu abgespeichert. Nun bringt er mir erst mal keine Fehlermeldungen
Der erste Teil des Codes geht so:
ich bin voll am arsch
Die Excel habe ich als csv Datei neu abgespeichert. Nun bringt er mir erst mal keine Fehlermeldungen
Der erste Teil des Codes geht so:
Code: Alles auswählen
rm(list = ls())
require("xlsx")
require("openxlsx")
require("dplyr")
df.tickets <- read.csv("C:\\Users\\...Copy.csv", sep=";")
dim(df.tickets)
str(df.tickets)
## Umwandlung von Zeichen in Text mit folgender Funktion: as.numeric
df.tickets$BC <- as.numeric(as.character(df.tickets$BC))
df.tickets$NTO <- as.numeric(as.character(df.tickets$NTO))
df.tickets$TSM <- as.numeric(as.character(df.tickets$TV))
df.tickets$TV <- as.numeric(as.character(df.tickets$TSM))
df.tickets <-subset(df.tickets, df.tickets$Ticket.status == "project team assigned" | df.tickets$Ticket.status == "on hold" | df.tickets$Ticket.status == "quotation sent" |
df.tickets$Ticket.status == "project go-live" | df.tickets$Ticket.status == "test system available" | df.tickets$Ticket.status == "hand over to cc" |
df.tickets$Ticket.status == "order received")
df.tickets <-subset(df.tickets, df.tickets$Customer.type == "Shipper")
df.tickets$trans_value_month <- ((df.tickets$BC*6.00) + (df.tickets$NTO*1.08)+(df.tickets$TSM*1.67)+(df.tickets$TV*0.43))*20
#https://.../732850/
## paste fügt einzelne werte zu einer Zeichenkette zusammen
## df.tickets$url_ticket<-paste0("=HYPERLINK(","\"https://...,"\"",")")
class(df.tickets$url_ticket) <- c(class(df.tickets$url_ticket), "formula")
Zuletzt geändert von seraphin12345 am So Aug 05, 2018 4:18 pm, insgesamt 2-mal geändert.
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
Das ist nur eine Folge davon, dass Dein Dataframe 0 Zeilen hat - sowie das Problem behoben ist, funktioniert wohl auch das Konstrukt unten.
Code: Alles auswählen
B <- BOD ## kleiner Beispieldataframe, der standardmäßig verfügbar ist
B0 <- B[NULL,] ## alle Zeilen löschen
B0$demand <- 7
Gruß, Jörgseraphin12345 hat geschrieben: ↑Fr Aug 03, 2018 11:44 am kannst du mir noch bei der folgenden Funktion helfen? Hier soll anscheinend ein Hyperlink mit der TicketID zusammengefügt werden
gibt die Fehlermeldung aus:Code: Alles auswählen
df.tickets$url_ticket<-paste0("=HYPERLINK(","\"https://.../",df.tickets$Ticket.ID,"\"",")")
Code: Alles auswählen
Fehler in `$<-.data.frame`(`*tmp*`, url_ticket, value = "https://.../df.tickets$Ticket.ID") : replacement has 1 row, data has 0
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
wenn ich str(df.tickets) anwende kommt jetzt
5877 obs. of 30 variables:
[...] das scheint ja jetzt zu passen
5877 obs. of 30 variables:
[...] das scheint ja jetzt zu passen
Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!
bigben hat geschrieben: ↑Fr Aug 03, 2018 11:30 am Sollte dabei eine Fehlermeldung auftreten, dann bitte diese Fehlermeldung anzeigen, ansonsten nochmalDabei dann bitte code-Tags verwenden: viewtopic.php?f=20&t=29Code: Alles auswählen
str(df.tickets)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte