2014-02-16 60 views
0
df <- data.frame(name=c('aa', 'bb', 'cc','dd'), 
       code=seq(1:4), value= seq(100, 400, by=100)) 
df 

v <- c(1, 2, 2) 
v 

A <- df[df$code %in% v,]$value 
A 

str(A) 

我試圖根據代碼獲取相應的值。我期待A的長度爲3;但實際上它返回的矢量爲2.如果我想要A成爲3的向量,即c(100,200,200),我該怎麼辦?基於向量的R下標

+1

使用'match'而非'%在%':'DF [匹配(V,東風$代碼), '值']' – jbaums

+0

你不只是意味着' DF(v,2)'? – PascalVKooten

+0

@PascalvKooten:我想象不一定......如果'v'是代碼向量而不是索引向量。 – jbaums

回答

2

%in%返回一個邏輯向量,相同長度的矢量1,表示是否每一個元素的矢量1矢量發生2.

相反,match函數返回時,對於矢量1的各元件,在載體2,其中元件第一次出現的位置(或NA如果它不存在矢量2) 。請嘗試以下操作:

df[match(v, df$code), 'value'] 
0

你可以只使用v作爲參數,如果那些都是其「價值」是你想要的線路:

> df[v,]$value 
[1] 100 200 200 
+0

僅僅因爲在這種情況下'df $ code'與行索引相同。 –

0
df[v,2] # minimum characters :) 
+0

僅僅因爲在這種情況下'df $ code'與行索引相同。 –