2016-10-03 3 views
-1

Ich habe einen Datenrahmen, die wie folgt aussieht:Erstellen Sie neue Spalten auf der Grundlage mathematischer Berechnung

df 

X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 
    0.14   0.84     0.92 
    0.88   0.06     0.08 
    0.91   0.17     0.85 
    0.08   0.9     0.11 
    0.11   0.16     0.04 
    0.83   0.1     0.87 

ich neue Spalten erstellen möchten, die denselben Namen mit zusätzlichen „_P“ hinzugefügt zuletzt und Berechnungsformel lautet:

für Spalte X24_TT_1.1 = 24 * (0,14/(1-0.14))

für Spalte X135_121.FTT_2.1 = 135 * (0,84/(1-0.84))

für Spalte X1055_121 . FTT_3.1 = 1055 * (0,92/(1-0.92))

Und schließlich sollte es so aussehen:

X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 X24_TT_1.2_P X135_121.FTT_2.2_P X1055_121.FTT_3.2_P 
0.14    0.84    0.92    3.91   708.75    12132.50 
0.88    0.06    0.08   176.00    8.62    91.74 
0.91    0.17    0.85   242.67    27.65    5978.33 
0.08    0.9    0.11    2.09   1215.00    130.39 
0.11    0.16    0.04    2.97    25.71    43.96 
0.83    0.1    0.87   117.18    15.00   7060.38 

Ich möchte, dies zu tun dynamisch-Datensatz mehr als 100 Spalten

hat
+0

Ich mag diese dynamisch tun, wie Daten-Set hat mehr als 100 Spalten – ROY

Antwort

0

Try this:

x <- sapply(names(df), function(x) { 
      s <- strsplit(x, "_")[[1]][1] 
      s <- substring(s, 2, nchar(s)) 
      as.numeric(s)*(df[,x]/(1 - df[,x])) 
    }) 


colnames(x) <- paste0(colnames(df), "_P") 
cbind(df, round(x,2)) 

    X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 X24_TT_1.1_P X135_121.FTT_2.1_P X1055_121.FTT_3.1_P 
1  0.14    0.84    0.92   3.91    708.75   12132.50 
2  0.88    0.06    0.08  176.00    8.62    91.74 
3  0.91    0.17    0.85  242.67    27.65    5978.33 
4  0.08    0.90    0.11   2.09   1215.00    130.39 
5  0.11    0.16    0.04   2.97    25.71    43.96 
6  0.83    0.10    0.87  117.18    15.00    7060.38 
+0

Ich möchte dies dynamisch als Datensatz hat mehr als 100 Spalten – ROY

+0

@ROY siehe mein Update – 989

0

Sie könnten das $ -Zeichen verwenden, um eine neue Spalte zu Datenrahmen hinzuzufügen, Sie folgendermaßen vorgehen:

df$X24_TT_1.1_P <- 24 * (df$X24_TT_1.1/(1-df$X24_TT_1.1)) 

EDIT

Unter der Annahme, dass Sie die Zahlen, die jede Spalte in einer separaten Liste multiplizieren gehen, könnten Sie dieses dinamically tun:

multiplier <- c(24,135,1055) 
A = c(2, 3, 5) 
B = c(4, 5, 6) 
C = c(7, 8, 9) 
df = data.frame(A, B, C) 

new_names <- paste(colnames(df), "_P") 
names <- c(colnames(df),new_names) 
initial_ncol <- ncol(df) 
for (i in 1:initial_ncol){ 

df$name <- multiplier[i] * (df$A/(1-df$A)) 
colnames(df) <- names[1:(i+initial_ncol)] 
} 
+0

Ich möchte dies dynamisch als Datensatz hat mehr als 100 Spalten – ROY

+0

@Roy Ich habe aktualisiert – Praderas

Verwandte Themen