2011-09-09 11 views
0

これは私の質問です。最初のデータフレームは、より大きなdataframe2に適用され、サブセット化される関数内に出力されます。他のベクトルに基づくデータフレームのサブセット

# dataframe1 
loc <- c(paste('Loc', 1:9, sep = '')) 
qit <- c(13, 27, 16, 14, 15, 21, 12, 11, 8) 

mydf <- data.frame(loc, qit) 
loc qit 
1 Loc1 13 
2 Loc2 27 
3 Loc3 16 
4 Loc4 14 
5 Loc5 15 
6 Loc6 21 
7 Loc7 12 
8 Loc8 11 
9 Loc9 8 

#dataframe 2 
loc <- c(paste('Loc', 1:9, sep = '')) 
vloc <- c(rep(loc, each=2)) 
allele <- c(
    13, 12, 27, 20, 16, 18, 
    14, 17, 15, 22, 21, 26, 
    12, 14, 11, 18, 8, 24 
) 
    afreq <- c(0.308, 0.4, 0.041, 0.5, 0.125, 0.5, 
      0.139, 0.2, 0.219, 0.2,0.176, 0.33, 
      0.358, 0.4, 0.274, 0.5, 0.173, 0.15) 
loctab <- data.frame(vloc, allele, afreq) 

    vloc allele afreq 
1 Loc1  13 0.308 
2 Loc1  12 0.400 
3 Loc2  27 0.041 
4 Loc2  20 0.500 
5 Loc3  16 0.125 
6 Loc3  18 0.500 
7 Loc4  14 0.139 
8 Loc4  17 0.200 
9 Loc5  15 0.219 
10 Loc5  22 0.200 
11 Loc6  21 0.176 
12 Loc6  26 0.330 
13 Loc7  12 0.358 
14 Loc7  14 0.400 
15 Loc8  11 0.274 
16 Loc8  18 0.500 
17 Loc9  8 0.173 
18 Loc9  24 0.150 

dataframe2から追加のafreq変数を使用してmydfのような新しいデータフレームを作成したいのですが。私はそれをサブセット化しようとしました:

loctab[loctab$allele %in% mydf$qit, ] 

    vloc allele afreq 
1 Loc1  13 0.308 
2 Loc1  12 0.400 
3 Loc2  27 0.041 
5 Loc3  16 0.125 
7 Loc4  14 0.139 
9 Loc5  15 0.219 
11 Loc6  21 0.176 
13 Loc7  12 0.358 
14 Loc7  14 0.400 
15 Loc8  11 0.274 
17 Loc9  8 0.173 

私は何をしたいのですか?ここでは、サブセットはvlocまたはloc変数を気にしません。これにより、qitのすべての値が一致するたびにサブセット化されます。 locとvlocへの参照を入れて、サブセットを作成してください。

答えて

3

たぶんmerge()機能は、あなたが探しているものです:

mydf2 <- merge(mydf,loctab,by.x = "qit", by.y = "allele") 

あなたは4列で終わるが、その後ちょうど余分"vloc"列を取り除くことができます。

関連する問題