2016-10-25 3 views
2

I einen Datenrahmen (DF) haben, die wie folgt aussieht:R: eine Funktion zur Datenrahmen Spalten Anwenden in einer anderen Tabelle definiert

A B C D E F G H 
a 1 2 3 4 5 3 4 2 
b 3 4 5 5 4 5 5 4 
c 1 4 6 7 9 6 7 4 
d 2 4 5 7 8 5 7 4 
e 2 2 4 5 7 4 5 2 

Ich mag würde das Verhältnis der verschiedenen Spalten berechnen, basierend auf einem Tisch wie diese, die angibt, welche Spalte der Zähler und der Nenner sein muss:

beispiel
num denom 
A E 
B G 
F C 
H D 

So wird die erste Spalte in der Ausgangsspalte A von Spalte E.

die outpu unterteilt sein t würde wie folgt aussehen (ich die Spaltennamen der Zähler behalten wollen):

A   B   F H 
a 0.2   0.5   1 0.5 
b 0.75  0.8   1 0.8 
c 0.111111111 0.571428571 1 0.571428571 
d 0.25  0.571428571 1 0.571428571 
e 0.285714286 0.4   1 0.4 

Ich hoffe, ich mache dies verständlich, hier ist die dput der ursprünglichen Tabelle:

structure(list(A = c(1L, 3L, 1L, 2L, 2L), B = c(2L, 4L, 4L, 4L, 
2L), C = c(3L, 5L, 6L, 5L, 4L), D = c(4L, 5L, 7L, 7L, 5L), E = c(5L, 
4L, 9L, 8L, 7L), F = c(3L, 5L, 6L, 5L, 4L), G = c(4L, 5L, 7L, 
7L, 5L), H = c(2L, 4L, 4L, 4L, 2L)), .Names = c("A", "B", "C", 
"D", "E", "F", "G", "H"), class = "data.frame", row.names = c("a", 
"b", "c", "d", "e")) 

Alle Hilfe wird sehr geschätzt! Hier Dank

+0

Nur 'df [c ("A",„B "," F "," H ")]/df [, c (" E "," G "," C "," D ")]. – 989

Antwort

1

we go:

mdf <- data.frame(num=c("A", "B", "F", "H"), denom=c("E", "G", "C", "D"), stringsAsFactors = F) 
df_num <- df[, mdf$num] 
df_denom <- df[, mdf$denom] 
df_num/df_denom 

Die stringAsFactors = F ist wichtig ...

+0

Vielen Dank! – arielle

+0

Ok. Bitte markieren Sie es als gelöst - wenn es ... – Christoph

3

Noch einfacher mit dplyr::transmute()

library(dplyr) 
df %>% transmute(A=A/E, B=B/G, F=F/C, H=H/D) 

#   A   B  F   H 
#1 0.2000000 0.5000000 6.00 0.5000000 
#2 0.7500000 0.8000000 6.25 0.8000000 
#3 0.1111111 0.5714286 10.50 0.5714286 
#4 0.2500000 0.5714286 8.75 0.5714286 
#5 0.2857143 0.4000000 10.00 0.4000000 
Verwandte Themen