Как извлечь значения из data.frame на основе вектора в R? - PullRequest
5 голосов
/ 31 октября 2011

предположим, у меня есть числовой вектор вроде:

x <- c(1.0, 2.5, 3.0)

и data.frame:

df<-data.frame(key=c(0.5,1.0,1.5,2.0,2.5,3.0),
       value=c(-1.187,0.095,-0.142,-0.818,-0.734,0.511))

df
  key  value
1 0.5 -1.187
2 1.0  0.095
3 1.5 -0.142
4 2.0 -0.818
5 2.5 -0.734
6 3.0  0.511

Я хочу извлечь все строки в ключе df $, которые имеют одинаковые значения, равные x, с таким результатом:

df.x$value
[1] 0.095 -0.734  0.511

Есть ли эффективный способ сделать это, пожалуйста? Я попробовал data.frame, hash package и data.table, но все безуспешно. Спасибо за помощь!


Спасибо, ребята. Я на самом деле пробовал аналогичную вещь, но получил ключ df $ и x в обратном порядке. Возможно ли это сделать с помощью функции hash () (в пакете hash)? Я вижу, хэш может делать такие вещи, как:

h <- hash( keys=letters, values=1:26 )
h$a # 1

h$foo <- "bar"
h[ "foo" ]
h[[ "foo" ]]

z <- letters[3:5]

h[z]
<hash> containing 3 key-value pair(s).
c : 3
d : 4
e : 5

Но похоже, что он не принимает массив в своей цепочке ключей, такой как:

h[[z]]
Error in h[[z]] : wrong arguments for subsetting an environment

но мне нужны значения только в виде вектора, а не хеша. В противном случае было бы идеально, чтобы мы могли избавиться от data.frame, используя некоторую «реальную» концепцию хеширования.

Ответы [ 2 ]

6 голосов
/ 31 октября 2011

Try,

df[df$key %in% x,"value"] # resp
df[df$key %in% x,]

Используя условие ИЛИ |, вы можете изменить его так, чтобы ваш вектор мог появляться в любом из ваших столбцов.Общий совет: также взгляните на which.

5 голосов
/ 31 октября 2011

Вы пробовали проверить значение ключа df $, находящегося в x, и извлечь значение из столбца значения? Я только говорю это вслух, потому что StackOverflow не нравится oneline ответы:

> x
[1] 1.0 2.5 3.0
> df
  key      value
1 0.5 -0.7398436
2 1.0  0.6324852
3 1.5  1.8699257
4 2.0  1.0038996
5 2.5  1.2432679
6 3.0 -0.6850663
> df[df$key %in% x,'value']
[1]  0.6324852  1.2432679 -0.6850663
> 

БОЛЬШОЕ ПРЕДУПРЕЖДЕНИЕ - сравнение с числами с плавающей запятой с == может быть плохой идеей - для получения дополнительной информации прочтите R FAQ 7.31.

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