2016-07-29 11 views
1

Meine Daten das folgende Formular hat:Looping Funktion Spaltennamen R

Individual Year X2011Int X2010Int X2009Int X2008Int X2007Int 
     1  2011 10.36703 18.07049 4789.338 51.3443 423.235 
     2  2010 10.36703 18.07049 4789.338 51.3443 423.235 
     3  2009 10.36703 18.07049 4789.338 51.3443 423.235 
     4  2008 10.36703 18.07049 4789.338 51.3443 423.235 

Wo die X2009Int, X2008Int, X2007Int Spalten der Schwere eines bestimmten Ereignisses an diesen festgelegten Zeiträume darstellen. Mein Ziel ist es, eine Funktion zu erstellen, die ich kann Schleife über mehrere Spalten folgendes zu erstellen:

Individual Year   T  T-1   T-2 
    1    2011  =X2011Int =X2010Int =X2009Int 
    2    2010  =X2010Int =X2009Int =X2008Int 
    3    2009  =X2009Int =X2008Int =X2007Int 
    4    2008  =X2008Int =X2007Int =X2006Int 

Zur weiteren Veranschaulichung, was auf Einzelfall 3 im Jahr geht 2009. Unter der Spalte $ T Ich würde das Ereignis Intensitätswert benötigen in X2009Int, $ T-1 Spalte = Wert von X2008Int, $ T-2 = X2007Int, $ T-3 = X2006Int usw. (Jahre von 2012-1980)

Jede Hilfe wird sehr geschätzt!

EDIT:

Follow up:

Ich bin immer noch Probleme mit meinem for-Schleife ist. Die erste Iteration funktioniert perfekt, scheint danach aber nicht zu funktionieren.

Die Links zu den Daten/Code sind: https://drive.google.com/open?id=0B32x3hkj1P-IMWF6LVBoeE5tVFE

Irgendwelche Tipps/Ideen sind sehr sehr geschätzt! :)

+0

Wenn wir uns die erste Zeile Individual 1 im Jahr 2011 ansehen. Die erste 0 wäre der Wert der Variablen $ X2011Int in meinem ursprünglichen Datenrahmen. Die zweite 0 (T-1) würde dem Wert $ X2010Int Variable in meinem ursprünglichen Datenrahmen entsprechen. Gleichermaßen entspricht der $ T-2-Wert dem $ X2009-Wert. – Recon93

+0

Können Sie mir einen Link zu TOY2 (Google Drive, GitHub usw.) geben? oder "dput" es oder etwas? –

+0

Danke. OK, ich bin gerade dabei, meine Antwort zu aktualisieren. –

Antwort

3

Vielen Dank für das hilfreiche Update. Ich denke, das ist das, was Sie wollen:

Individual Year X2009Int X2010Int X2011Int 
1  2011 10.36703 18.07049 4789.338 
2  2011 10.36703 18.07049 4789.338 
3  2010 10.36703 18.07049 4789.338 
4  2010 10.36703 18.07049 4789.338 
5  2009 10.36703 18.07049 4789.338 
6  2009 10.36703 18.07049 4789.338 

d <- read.table(con <- file("clipboard"), header = T) 

d1 <- data.frame(
    Individual = d$Individual, 
    Year  = d$Year, 
    T   = 0, 
    "T-1"  = 0, 
    "T-2"  = 0 
) 


# First let's rename the columns of the original data set to make it easier to use 
nms <- colnames(d[,3:ncol(d)]) 
nms <- gsub("X", "", nms) 
nms <- gsub("Int", "", nms) 
nms <- c(colnames(d)[1:2],nms) 

colnames(d) <- nms 

# Now, let's populate the new data.frame 
for(i in unique(d1$Year)){ 
    d1$T[d1$Year == i] <- d[d$Year == i,colnames(d) == i] 
    d1$T1[d1$Year == i-1] <- d[d$Year == i-1,colnames(d) == i-1] 
    d1$T2[d1$Year == i-2] <- d[d$Year == i-2,colnames(d) == i-2] 

} 
Individual Year   T  T-1  T-2 
1   1 2011 4789.33800  0  0 
2   2 2011 4789.33800  0  0 
3   3 2010 18.07049 18.07049  0 
4   4 2010 18.07049 18.07049  0 
5   5 2009 10.36703 10.36703 10.36703 
6   6 2009 10.36703 10.36703 10.36703 

UP

OK FOLGEN, so gibt es ein paar Probleme in der Follow-up-Code geht.

  1. Die Klasse wurde nicht wirklich geändert. Bitte kommentieren Sie die transform Aussagen und verwenden diese:

    d1$Year <- as.numeric(d1$Year)

    TOY2$Year <- as.numeric(TOY2$Year)

  2. Ich denke Sie IntensityTOY verwendet, wo Sie TOY2 verwenden soll. Ich habe nicht IntensityTOY und ich bin nicht vertraut mit Ihren spezifischen Daten, also bin ich nicht sicher, aber überprüfen Sie bitte, ob Sie

    nms <- colnames(TOY2[,3:ncol(IntensityTOY)])

zu

`nms <- colnames(TOY2[,3:ncol(TOY2)])` 
ändern möchten
  1. Sie haben einige Werte des Jahres, die #N/A sagen. Das kann nicht in numerisch konvertiert werden und verursacht Probleme. Hier ist eine Lösung:

    d1$Year <- gsub("#N/A","", d1$Year) # Tun Sie dies vor als.(Numerisch)

    TOY2$Year <- gsub("#N/A","", TOY2$Year)

Eine letzte Sache. Die NA s in Ihren Daten können für subskribierte Zuweisungen problematisch sein. Es gibt mehrere Möglichkeiten, dies zu beheben. Wenn diese Fehlermeldung auftaucht, können Sie wählen, NA zu 0 zu ändern, die NAs wegzulassen, ihnen zuzuschreiben oder sie auszuschließen (!is.na(...)).

+0

Danke für solch eine ausführliche Antwort. Wenn wir auf den bearbeiteten Abschnitt meiner Frage schauen könnten, habe ich ein klareres Beispiel meiner Zieldaten. Ihr Code ermöglicht es mir, das Jahr an die Spalte T anzupassen. Wie würde ich die Werte unter den Spalten "T-1" und "T-2" einfügen? Ich stelle mir vor, ich müsste das für jedes einzigartige Jahr Zeile für Zeile machen und dann über Jahre hinweg. Danke! – Recon93

+1

Ich habe gerade für mehr Klarheit bearbeitet. Prost :) – Recon93

+1

@ Recon93 Ich glaube, ich verstehe jetzt. Ich habe meine Antwort komplett neu geschrieben. Bitte guck dir das an. –

Verwandte Themen