Как я могу использовать элементы данных, такие как хэш-ключи / словарные ключи / первичные ключи? - PullRequest
9 голосов
/ 25 июля 2011

У меня есть фрейм данных, в котором я хочу использовать определенные значения в качестве хеш-ключей / словарных ключей (или как вы их называете на выбранном вами языке) для других значений в этом фрейме данных.Скажем, у меня есть такой фрейм данных, который я прочитал из большого 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 являются уникальными идентификаторами в моем наборе данных.Как я тогда получаю данные, используя QN.number в качестве ссылки для других значений, то есть я хочу знать Call или Allele.X.Rn для данного QN.number?Кажется, что row.names могут помочь, но как мне их использовать в этом случае?

Ответы [ 3 ]

5 голосов
/ 25 июля 2011

Использование 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

Теперь я не уверен, насколько это умно, и выполняет ли он последовательный поиск для каждого имени строки или ускоряет индексацию ...

4 голосов
/ 25 июля 2011

Использование subset.

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

with предоставляет альтернативу; здесь выводом является вектор, а не другой фрейм данных.

with(your_data, Allele.X.Rn[QN.number == "QN2200"])
1 голос
/ 25 июля 2011

Предполагая, что мы храним наш фрейм данных в имени переменной - сейчас я назову его dataframe - это должно сделать следующее:

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

Где, конечно, <whatever> - это номер, который вы хотели бы использовать для Qn.number.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...