Net Squared Displacement

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Net Squared Displacement

Beitrag von student »

Schau Dir bitte noch einmal diese Code-Zeile genau an:
nsdplot <- xyplot (nsdall ~ zerostart/3600, data = datansd1, col = "grey", type = 'b', ylab = expression paste"
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag von Arthemisia »

Ja, genau das zeigt R in der Fehlermeldung an, aber wie korrigiere ich das?

Das hier ist die entsprechende Zeile aus dem Original-Skript:

nsdplot <- xyplot (nsdall ~ zerostart/3600, data = datansd1, col = "grey", type = 'b', ylab = expression paste('Net squared displacement ', ' ', (km^2))), xlab = "Hours after trip start")
plot (nsdplot)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Net Squared Displacement

Beitrag von bigben »

Hi!

expression ist eine Funktion und wie üblich erwartet diese Funktion, dass nach ihrem Namen eine Klammer aufgeht und in der Klammer das oder die Argumente stehen. Stattdessen steht da mit paste der nächste Funktionsname, und das versteht R natürlich nicht. Außerdem gilt der banale Satz, dass in einem Kommando immer genausoviele Klammern auf wie zu gemacht werden müssen, was hier nicht geschieht. Ich vermute mal, dass man einfach nur zwischen expression und paste eine Klammer auf machen müsste, aber um das auszuprobieren müsste man geeignete Musterdaten haben.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Net Squared Displacement

Beitrag von Athomas »

Hier die "richtigen" Originalzeilen, vollständig und etwas anders formatiert:

Code: Alles auswählen

nsdplot <- xyplot(nsdall ~ zerostart/3600, data=datansd1, col="grey", 				#color for the observed locations
type='b',											# 'b' shows the locations as dots, with a line connecting
												#successive locations. Can also be 'p' for just the locations, or 'l' for just
												#the line between locations
ylab=expression(paste('Net squared displacement ',' ', (km^2))),				#y axis label
xlab="Hours after trip start")
plot(nsdplot)
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Net Squared Displacement

Beitrag von Athomas »

Zu dem ganzen "Kapitel 3" gibt es ein PDF-Skript, das zwar nicht gut, aber besser :) lesbar ist: https://ecosystems.psu.edu/research/lab ... ink-to-pdf
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag von Arthemisia »

Hallo,
nachdem das Problem mit dem Zeitstempel endlich gelöst ist, läuft das Skript bis hierhin fehlerfrei:

Code: Alles auswählen

Duemmer$NewDate <- as.POSIXct(Duemmer$timestamp, format="%Y-%m-%d %H:%M:%S", origin="1970-01-01")
timediffD <- diff(Duemmer$NewDate)*60*60
Duemmer <- Duemmer [-1,]

Duemmer$timelag <-as.numeric(abs(timediffD))
summary(Duemmer$timelag)
# Duemmer <- subset(Duemmer, Duemmer$timelag < 18000)

Duemmer $Year <- format(Duemmer $NewDate, "%Y")
# Duemmer <- subset(Duemmer, Duemmer $Year != "NA")
Duemmer $YearBurst <- c(paste(Duemmer $trackId, Duemmer $Year, sep="_"))
Duemmer $YearBurst <- as.factor(Duemmer $YearBurst)
str(Duemmer)
summary(Duemmer $YearBurst)
Duemmer <- subset(Duemmer, table(Duemmer $YearBurst)[ Duemmer $YearBurst] > 100)
Duemmer $YearBurst <- factor(Duemmer $YearBurst)

Dd1 <- Duemmer
str(Dd1)
indataD <-Dd1
innamesD <- unique(Dd1$ YearBurst)
innamesD <- innamesD [1:22]
outnamesD <- innamesD
Jetzt hängt es an der nächsten Stelle:

Code: Alles auswählen

for (i in 1:length(innamesD)){
  data <- indataD [which(indataD$YearBurst==innamesD[i]),]
  if(dim(data)[1] != 0){
  data.xy = data [c("X", "Y")]
  coordinates(data.xy) <- ~X+Y    
  sppt <- SpatialPointsDataFrame(coordinates(data.xy), data)
  proj4string(sppt) <- CRS("+proj=utm +zone=12 +datum=WGS84")
  write.table(sppt, paste(outnamesD[i], "txt", sep="."), sep="\t", quote=FALSE, row.names=FALSE)
  write.table(paste(outnamesD[i], "txt", sep="."), sep="\t", quote=FALSE, row.names=FALSE, col.names=FALSE, "In_list.txt", append=TRUE)
}}
Wenn ich das laufen lasse, bekomme ich diese Fehlermeldung:
Fehler in `[.data.frame`(data, c("X", "Y")) :
nicht definierte Spalten gewählt

Wo hängt es denn jetzt? Allmählich bin ich nur noch :oops: , ich will damit einfach nur noch fertig werden !!!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Net Squared Displacement

Beitrag von jogo »

hm, in einem Dataframe ist doch die zweite Dimension für die Spalten zuständig; etwa so?

Code: Alles auswählen

 data.xy = data [, c("X", "Y")]
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Net Squared Displacement

Beitrag von bigben »

Hallo Jörg,

das war auch mein erster Gedanke. Tatsächlich scheint R damit aber kein Problem zu haben:

Code: Alles auswählen

bsp <- data.frame(X = 1:3, 
                  Y = 2:4,
                  Z = 3:5)
bsp[c("X", "Y")] 
#>   X Y
#> 1 1 2
#> 2 2 3
#> 3 3 4

LG,
Bernhard


Nachtrag: Ok, da muss man erstmal drauf kommen: Diese Syntax ist völlig in Ordnung für "richtige" data.frames, aber sie funktioniert nicht mit data.tables:

Code: Alles auswählen

library(data.table)
bsp <- data.table(X = 1:3, 
                  Y = 2:4,
                  Z = 3:5)
bsp[c("X", "Y")] 
#> Error in `[.data.table`(bsp, c("X", "Y")): When i is a data.table (or character vector), the columns to join by must be specified using 'on=' argument (see ?data.table), by keying x (i.e. sorted, and, marked as sorted, see ?setkey), or by sharing column names between x and i (i.e., a natural join). Keyed joins might have further speed benefits on very large data due to x being sorted in RAM.
Arthemisia: Versuch mal, knapp vor Auftreten des Fehlers Deinen data.table in eine "richtigen" data.frame umzuwandeln. Das geht mit

Code: Alles auswählen

data <- as.data.frame(data)
---
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: Net Squared Displacement

Beitrag von jogo »

Hallo Bernhard,
bigben hat geschrieben: Mo Sep 12, 2022 10:55 am
Nachtrag: Ok, da muss man erstmal drauf kommen: Diese Syntax ist völlig in Ordnung für "richtige" data.frames, aber sie funktioniert nicht mit data.tables: ...
das war nun wieder mein ursprünglicher Gedanke, da Arthemisia gelegentlich mit data.table arbeitet. Aber dort steht ja in der Fehlermeldung:
Fehler in `[.data.frame`(data, c("X", "Y")) :
nicht definierte Spalten gewählt


Bei einem reproduzierbaren Beispiel mit entsprechenden Daten könnte man wirklich konkret antworten.

Gruß, Jörg
Arthemisia
Beiträge: 17
Registriert: Fr Aug 26, 2022 2:47 pm

Re: Net Squared Displacement

Beitrag von Arthemisia »

Ich nehme an, es soll ein neues Data Frame erzeugt werden, mit den Spalten X und Y, und in die Zeilen soll dann jeweils nach jedem Durchlauf der For-Schleife das Ergebnis eingetragen werden.
Das würde Sinn machen, da für jedes Tier einzeln die Migrationsbewegungen im Jahresverlauf kumuliert aufgetragen werden sollen, auf der x-Achse die Monate, auf der y-Achse die Entfernung. Es gibt vorher auch noch keinen data Frame, der im Original-Skript mit "data" oder "data.xy" benannt worden ist.
Antworten