2016-09-05 4 views
1

私は1000個のdata.framesのリストを持っています。それらをそれぞれ「単一の」data.frameで分割する必要があります。リスト内の各data.frameを別のdata.frameで分割します。

data.frames(リストに含まれる)の各観測は、 'single' data.frameと一致しなければならない特定のIDを持ち、後者に含まれていないIDは無視する必要があります分割ができないため)。

ここではリストに含まれている私のdata.framesの1の例:

df = read.table(text = 'ID Num 
         D  34 
         W  45 
         Q  12 
         Y  45 
         B  11 
         O  2', header = TRUE) 

'シングル' data.frameは以下の通りです:sing_df私のことでダイビングdfことで

sing_df = read.table(text = 'ID Num 
           D 14 
           Q 11 
           B 9', header = TRUE) 

出力は:

ID Num 
D 2.428 
Q 1.09 
B 1.22 

どのような提案ですか?

答えて

0

mergeデータセットを 'ID'で作成し、 'Num.x'を 'Num.y'で割って 'Num'を作成します。我々はいくつかのパッケージを必要とする場合には

transform(merge(df, sing_df, by = "ID"), Num = Num.x/Num.y)[-(2:3)] 
# ID  Num 
#1 B 1.222222 
#2 D 2.428571 
#3 Q 1.090909 

、その後dplyrからinner_joinはOP、約1000のデータセットのを述べたように、それを維持する方が良い

library(dplyr) 
inner_join(df, sing_df, by = "ID") %>% 
     mutate(Num = Num.x/Num.y) %>% 
     select(-Num.x, -Num.y) 

参考にすることができlistlist要素をループして、上記と同じ手順を適用します。

lst1 <- lapply(lst, function(dat) transform(merge(dat, sing_df, by = "ID"), 
      Num = Num.x/Num.y)[-(2:3)]) 
関連する問題