2011-09-09 40 views
0

這裏是我的問題,第一個數據框是在一個函數內部輸出的,這個函數將被應用到更大的數據框2上,以便對它進行子集化。子集基於其他矢量的數據框

# 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 

我想使用mydf和dataframe2中的其他afreq變量創建新的數據框。我試圖將其子集:

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"列。