2017-05-12 4 views
0

ラベルをデータフレーム内の列で指定された範囲の値に割り当てるコードを更新しようとしています。私はmatchを使用しています。これは、列間の正確な一致についてのみラベルを割り当てます。範囲を照合してラベルを割り当てるには、これをどのように変更しますか? サンプルコードは次のとおりです。あなたがmatchを使用して見ることができるように値がインターバル内にあるときにmatch()を使用してラベルを割り当てる

library(dplyr) 
a<- data.frame(source=c(1,25,41,36,45, 19), name=c("stop", "halt", "go","think","talk","sit")) 

d<- a$source 

t<- 0.2 
al<- a$source- t 
ah<- a$source + t 

b= data.frame(source= c(1:50,1.1:50.1)) 
v=c(rbind(sort(al),ah[order(al)])) 
v 
c<-b %>% rowwise() %>% filter(sum((source>al)*(source<ah))>0) %>% ungroup() #thank to @lamia 

c$name<-a$name[match(c$source,a$source)] # problem 
c$name 

は、正確なラベル二つのソースの間で一致しました。 "1"が "1.1"に受信するラベルは、同じ間隔に入るので、割り当てることが可能ですか?

ありがとうございます。

+1

両方のソースで 'integer()'や 'round()'のようなものを適用するだけです。何かこれは次のようなものです: 'C $ name <-a $ name [整数($ソース)の整数(整数)]' – Masoud

+0

'round()'が働いていました。 ありがとうございます。 –

+0

任意の範囲(整数だけでなく)で動作するより一般的な回答が必要な場合は、それに基づいて「切り取り」と一致する指標を作成することができます。 – Barker

答えて

0

これをプラスマイナス0.2にしたい場合は、round(x, digits = 0)があなたの仕事です。

c$name<-a$name[match(round(c$source),round(a$source))] 

コメントで述べたようにcutも使用することを検討してください。

関連する問題