2015-03-19 61 views
4

我有2個矢量計數一個矢量的值的出現在另一個向量

v1 <- c(164,38,20,19,163,22,21,4) 
v2 <- c(0,21,164,60,59,58,57,22,5,3,164,38,22,20,4,164,38,20,19,3,4,19,20,164,21,3,4,19,22,20,164,163,20,19,3) 

我想計數數的發生在載體1的矢量2. 我試圖用一個循環做但由於表格格式的原因,它沒有起作用。

a<-table(v2) 
occurrence<-numeric() 
for(i in v1){ 
    occurrence[i]<-a[names(a)==v1[i]] 
} 
occurSum<-sum(occurrence) 

您是否知道一種最好不使用循環的方法?

+0

取決於:是否保證'v1'中的所有值都是唯一的? – 2015-03-19 13:00:47

+0

是的,在我的情況是。 – user3584444 2015-03-20 13:53:52

回答

7

也許你正在尋找類似的table%in%組合:

> table(v2[v2 %in% v1]) 

    4 19 20 21 22 38 163 164 
    3 4 5 2 3 2 1 5 

或者,建立在你嘗試,你可以嘗試:

tv2 <- table(v2) 
tv2[match(v1, names(tv2))] 
+0

非常感謝。這正是我需要的。 – user3584444 2015-03-19 10:49:33

+1

'is.element(x,y)'與'%y'中的x%相同 – zx8754 2015-03-19 11:06:57

1

嘗試:

vec1 = c(2,3,4,5) 
vec2 = c(1,2,2,3,3,3,3,4,5,5,5,6,7,7) 

rle(sort(vec2[vec2 %in% vec1])) 

#Run Length Encoding 
# lengths: int [1:4] 2 4 1 3 
# values : num [1:4] 2 3 4 5 
+0

@Ananda,對! Rle需要連續的值,所以需要先排序!無論如何,表格是要走的路。 – 2015-03-19 10:50:02

+0

我一直在尋找類似於第一個答案,謝謝! – user3584444 2015-03-19 10:54:21

相關問題