2011-10-31 68 views
4

假設我有這樣一個數字矢量:如何從基於R中的向量的data.frame提取值?

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包和data.table,都沒有成功。感謝幫助!


謝謝你們。我實際上嘗試過類似的東西,但得到了DF $ key和x反轉。是否可以使用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。

+1

歡迎來到SO!請在您的data.frame上使用'dput()'並粘貼結果以使其可重現。這次只添加了可重複版本的df。 –

回答

6

嘗試,

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

使用OR |條件,你可以修改它,從而可以在任何你列的出現你的載體的一種方式。一般提示:也看看which

5

您是否嘗試過測試x中的df $ key的值並提取value列中的值?我只說出聲來,因爲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 
> 

BIG警告 - 與==浮點數比較可能是一個壞主意 - 讀取R FAQ 7.31獲取更多信息。

+0

呃,Spacedman,你打了我一秒。不應該編輯操作系統,並使其可重複使用;) –

+1

@Spacedman - 所以這就是爲什麼以下不能正常工作,歡呼,每天學習新的東西:) subset(df,key == x,選擇=鍵) –

相關問題