R 使用match()在值落在某个间隔内时指定标签
我正在尝试更新代码,以便将标签指定给数据框中某列指定的范围内的值。我使用的是R 使用match()在值落在某个间隔内时指定标签,r,dplyr,match,R,Dplyr,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-
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
库(dplyr)
a必须在两个源上应用类似于integer()
或round()
的内容。类似这样:c$nameround()
有效。我完全没有想过。无缘无故地使事情复杂化了。谢谢。如果你想得到一个更一般的答案,它适用于任何范围(不仅仅是整数),你可以创建一个带有cut
的指示器,并基于此进行匹配。只需在两个源上应用类似integer()
或round()
的内容即可。类似这样:c$nameround()
有效。我完全没有想过。无缘无故地使事情复杂化了。谢谢你。如果你想要一个更一般的答案,它适用于任何范围(不仅仅是整数),你可以创建一个带有cut
的指示器,并基于此进行匹配。