HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

seraphin12345

HILFE! Subset auf eingelesene Daten funktioniert nicht!!

Beitrag 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ß
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

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

Beitrag 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
seraphin12345

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

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

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

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

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

Beitrag 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
seraphin12345

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

Beitrag 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
seraphin12345

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

Beitrag 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")
Zuletzt geändert von seraphin12345 am So Aug 05, 2018 4:18 pm, insgesamt 2-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

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

Beitrag 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
seraphin12345

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

Beitrag von seraphin12345 »

wenn ich str(df.tickets) anwende kommt jetzt

5877 obs. of 30 variables:
[...] das scheint ja jetzt zu passen
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

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

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten