2017-05-22 4 views
0

おはよう
1)Excelのマッチ機能に似たR機能はありますか?Rの機能はExcelと同じですか?

2)私は以下のように自分自身を作っています(長すぎます..TT)
誰かが改善する必要があると提言できますか?または他の方法ですか?

fmatch2<-function(ss1, ss2) { #ss1 correspond the first argument of Excel match function. ss2 for the second. 
fmatch<-function(ii,ss) { # return location in ss where ii match. 
    if (length(which(ss==ii))>0) { 
     rr<- min(which(ss==ii)) 
    } else { 
     if (length(which(ss>ii))>0) 
     {rr<-min(which(ss>ii))-1 } 
    } 
return(rr) 
}  
rr<-list() 
n<-1 
for (x in ss1) { # apply fmatch to each member in ss1 
    nn<-fmatch(x,ss2[1:n]) 
    rr<-rbind(rr,nn) 
    n<-n+1 
} 
as.vector(unlist(rr[,1])) 
} 

以下の関数fmatch2の使用法。
Excel "= MATCH(H1、$ I $ 1:1,1)"を模倣しています。 "ch、ci"以下のリストの要素名は、列H、列Iに対応します。結果はcnという名前のリストになります。

x<-data.frame(cf=c(0,1,2,3,4,5),ch=c(0,0,3,6,6,6),ci=c(0,0,3,7,11,13)) 

y<-data.frame(cf=c(0,1,2,3,4,5),ch=c(0,0,3,6,6,6),ci=c(0,0,3,7,11,13),cn=fmatch2(x[[2]],x[[3]])) 
+0

は 'match'助けていますか?最初の一致のみを返します。それ以外の場合は、 '?grep' –

+0

一致のインデックス(つまり、どの行に一致するもの)を見つけようとしていますか? – akash87

+1

Excelの 'match'(https://support.office.com/en-us/article/MATCH-function-e8dffd45-c762-47d6-bf89-533f4a37673a)の文書を読むと、それは実際には2つに相当するようですRの関数: 'match_type'が0のときは' match'、デフォルト値のときは 'findInterval'です。 OP、 '?findInterval'を見てください。 – nicola

答えて

0

勿論私はch==6ためNAを返すために、あなたのfmatch2機能を期待するとして、私は(6 CIに存在しないため)、あなたが何をしようとして全くわからないが、私は使用して物事を愛しますdplyr:?

library(dplyr) 
result <- x %>% # "%>%" means "and then" 
      mutate(chInCi = match(ch, x$ci)) #adds a column named "chInCi" with the position in ci of the first match of the value in ch 

結果

cf ch ci chInCi 
1 0 0 0  1 
2 1 0 0  1 
3 2 3 3  3 
4 3 6 7  NA 
5 4 6 11  NA 
6 5 6 13  NA 
関連する問題