5

假设我有一个数字向量,例如:

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$key 中具有相同值等于 x 的所有行,结果如下:

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

请问有没有有效的方法来做到这一点?我试过data.frame、hash包和data.table,都没有成功。感谢帮助!


多谢你们。我实际上尝试了类似的事情,但 df$key 和 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 。

4

2 回答 2

6

尝试,

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

使用 OR|条件,您可以修改它,使您的向量可能出现在您的任一列中。一般提示:也看看which

于 2011-10-31T08:48:43.433 回答
5

您是否尝试过测试 x 中的 df$key 的值并提取 value 列中的值?我只是大声说出来,因为 StackOverflow 不喜欢单行答案:

> 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 了解更多信息。

于 2011-10-31T08:40:51.843 回答