Seite 1 von 2

HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 10:25 am
von seraphin12345
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ß

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 10:46 am
von jogo
Hallo seraphin,

willkommen im Forum!
seraphin12345 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)
Weiter unten schreibst Du immer von einem Objekt df.tickets; meintest Du hier

Code: Alles auswählen

df.tickets <- 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?
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.
Die wichtigsten Informationen liefert die Funktion str(), also:

Code: Alles auswählen

str(df.tickets)

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
Auch für uns sind für die Diagnose die Informationen aus str(df.tickets) wichtig.
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!!

Verfasst: Fr Aug 03, 2018 11:13 am
von seraphin12345
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

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:30 am
von bigben
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

Code: Alles auswählen

rm(df.tickets)
aus Deinem Speicher und lese es dann erneut mit

Code: Alles auswählen

df.tickets <- read.csv("C:\\[...], header=FALSE, sep=";")
ein. Sollte dabei eine Fehlermeldung auftreten, dann bitte diese Fehlermeldung anzeigen, ansonsten nochmal

Code: Alles auswählen

str(df.tickets)
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

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:34 am
von jogo
Hallo seraphin,
seraphin12345 hat geschrieben: Fr Aug 03, 2018 11:13 am ja sorry, das "a" hatte ich bereits entfernt und durch df.tickets ersetzt :)
o.k.

mit der Funktion str(df.tickets) kommt folgendes heraus:

data.frame': 0 obs. of 31 variables:
...
Und das ist das Ergebnis direkt nach dem Einlesen? Wenn ja, dann ist da wirklich einiges schief gegangen.
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 = "...")
$ 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 "","...
Die read.table()-Funktionen wandeln Zeichenkette in Faktoren. Mit stringsAsFactors = FALSE kann man das unterbinden.
Ob man das so will, muss man selbst entscheiden.
$ Maintenance.fees : Factor w/ 219 levels "","0","0,1","100",..:
Das sieht komisch aus, eventuell hätte man dec="," setzen sollen

$ 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",..:
Datumswerte wird man ohnehin nochmal umwandeln müssen, wenn man sie richtig nutzen will.
$ Open.Invoices : Factor w/ 3 levels "","#VALUE!","0,00 \200":
Dies soll bestimmt nicht so sein.
$ Turnover : Factor w/ 352 levels "","0","10252",..:
auch hier gibt es Schwierigkeiten.
$ trans_value_month : num
o.k.

Gruß, Jörg

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:44 am
von seraphin12345
kannst du mir noch bei der folgenden Funktion helfen? Hier soll anscheinend ein Hyperlink mit der TicketID zusammengefügt werden

Code: Alles auswählen

df.tickets$url_ticket<-paste0("=HYPERLINK(","\"https://.../",df.tickets$Ticket.ID,"\"",")")
gibt die Fehlermeldung aus:

Code: Alles auswählen

Fehler in `$<-.data.frame`(`*tmp*`, url_ticket, value = "https://.../df.tickets$Ticket.ID") : 
  replacement has 1 row, data has 0
Viele Grüße

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:49 am
von seraphin12345
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:

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")

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:53 am
von jogo
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
seraphin12345 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

Code: Alles auswählen

df.tickets$url_ticket<-paste0("=HYPERLINK(","\"https://.../",df.tickets$Ticket.ID,"\"",")")
gibt die Fehlermeldung aus:

Code: Alles auswählen

Fehler in `$<-.data.frame`(`*tmp*`, url_ticket, value = "https://.../df.tickets$Ticket.ID") : 
  replacement has 1 row, data has 0
Gruß, Jörg

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:56 am
von seraphin12345
wenn ich str(df.tickets) anwende kommt jetzt

5877 obs. of 30 variables:
[...] das scheint ja jetzt zu passen

Re: HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Verfasst: Fr Aug 03, 2018 11:58 am
von bigben
bigben hat geschrieben: Fr Aug 03, 2018 11:30 am Sollte dabei eine Fehlermeldung auftreten, dann bitte diese Fehlermeldung anzeigen, ansonsten nochmal

Code: Alles auswählen

str(df.tickets)
Dabei dann bitte code-Tags verwenden: viewtopic.php?f=20&t=29