【问题标题】:Subset a dataframe based on other vector基于其他向量对数据框进行子集化
【发布时间】:2011-09-09 20:45:03
【问题描述】:

这是我的问题,第一个数据帧是在一个函数内输出的,该函数将应用于更大的 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 来进行子集化。

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

    也许merge() 函数正是您要寻找的:

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

    您最终得到 4 列,但随后可以去掉多余的 "vloc" 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2020-10-03
      • 1970-01-01
      相关资源
      最近更新 更多