首页 > 解决方案 > R中的带状变量

问题描述

对于以下代码:

x <- data.frame(year = c(1730, 1860, 1941, 2011))

century_bands <- data.frame(min_year = c(1700, 1800, 1900, 2000),
                            max_year = c(1799, 1899, 1999, 2099),
                            century_name = c("18th", "19th", "20th", "21st"))

对于 中的每个值,我想x使用 中的信息计算出它所属的世纪的名称century_bands。我无法想象这很难实现,但我无法弄清楚。有人可以帮忙吗?有没有办法使用这个dplyr包(我经常使用它)或者其他一些技术?

这只是现实生活中的一个非常简单的例子,乐队在 100 年的步长上不是很整齐——所以不幸的是,任何基于将年份除以 100 等的捷径都行不通。

谢谢你。

标签: rdplyrfuzzyjoin

解决方案


利用的一种选择fuzzyjoin可能是:

fuzzy_left_join(x, century_bands, 
                by = c("year" = "min_year",
                       "year" = "max_year"),
                match_fun = list(`>=`, `<=`)) 

  year min_year max_year century_name
1 1730     1700     1799         18th
2 1860     1800     1899         19th
3 1941     1900     1999         20th
4 2011     2000     2099         21st

推荐阅读