如何使用数据框的元素,如散列键/字典键/主键?

时间:2011-07-25 10:03:37

标签: r

我有一个数据框,我希望在该数据框中使用某些值作为哈希键/字典键(或者您用您选择的语言调用的任何值)。假设我有一个这样的数据框,我从一个大的csv文件中读取(仅显示第一行):

  Plate.name QN.number Well Allele.X.Rn Allele.Y.Rn Call
1 Plate 1_A1    QN2200   A     1.766       2.791    Both 

在R代码中将是:

 structure(list(Plate.name = structure(1L, .Label = "Plate 1_A1", class = "factor"), 
    QN.number = structure(1L, .Label = "QN2200", class = "factor"), 
    Well = structure(1L, .Label = "A1", class = "factor"), Allele.X.Rn = 1.766, 
    Allele.Y.Rn = 2.791, Call = structure(1L, .Label = "Both", class = "factor")), .Names = c("Plate.name", 
"QN.number", "Well", "Allele.X.Rn", "Allele.Y.Rn", "Call"), class = "data.frame", row.names = c(NA, 
-1L))

QN.numbers是我的数据集中的唯一ID。然后我如何使用QN.number作为其他值的参考来检索数据,也就是说我想知道给定QN.number的Call或Allele.X.Rn?似乎row.names可以做到这一点,但那么我将如何在这个实例中使用它们?

3 个答案:

答案 0 :(得分:5)

使用row.names是这样的:

> row.names(d)=d$QN.number
> d["QN2200",]
       Plate.name QN.number Well Allele.X.Rn Allele.Y.Rn Call
QN2200 Plate 1_A1    QN2200   A1       1.766       2.791 Both
> d["QN2201",]
   Plate.name QN.number Well Allele.X.Rn Allele.Y.Rn Call
NA       <NA>      <NA> <NA>          NA          NA <NA>

您只需使用行名作为子集中的第一个参数。您还可以使用多个行名称:

> d=data.frame(a=letters[1:10],b=runif(10))
> row.names(d)=d$a
> d[c("a","g","d"),]
  a         b
a a 0.6434431
g g 0.6724661
d d 0.9826392

现在我不确定这是多么聪明,以及它是否对每个行名称进行顺序搜索或更快的索引......

答案 1 :(得分:4)

使用subset

 subset(your_data, QN.number == "QN2200", Allele.X.Rn)

with提供了另一种选择;这里输出是一个向量而不是另一个数据帧。

with(your_data, Allele.X.Rn[QN.number == "QN2200"])

答案 2 :(得分:1)

假设我们将数据框存储在变量名中 - 我现在将其称为dataframe - 以下内容应该这样做:

dataframe$Allele.X.Rn[which(dataframe$Qn.number == <whatever>)]

当然,<whatever>是您要用于Qn.number的号码。