2016-10-25 14 views
2

他のテーブルで定義されたデータフレーム列に関数を適用する:テーブルに基づいて、私は異なる列の比率を計算したい R:このようになり、私はデータフレーム(DF)を有する

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 

、このように、それが分子と分母にする必要のあるカラムを示し:

num denom 
A E 
B G 
F C 
H D 

したがって、例えば出力の最初の列は、列E.

outpuで割っ列Aなりtは、この(私は分母の列名を維持したい)のようになります。私は、これは理解できる作っています願って

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 

、ここで元のテーブルのdputは次のとおりです。

どれ
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")) 

助けが大いに評価されるでしょう!おかげ

+0

とジャスト 'DF [、C( "A"、「B 「F」、「H」)]/df [、c( "E"、 "G"、 "C"、 "D")] ' – 989

答えて

1

は、ここに私達は行く:

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 

stringAsFactors = Fが重要です...

+0

ありがとうございました! – arielle

+0

それが解決されたとしてマークしてください - もしそうなら... – Christoph

3

でも簡単に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 
関連する問題