首页 > 解决方案 > R中是否有任何捷径可以根据以下数据找到最小最大值?

问题描述

我有两个数据集。第一个是这样的:

code | name
115  | A
120  | B
125  | A
130  | C
140  | A

第二个是这样的:

code | Year
115  | 2015
140  | 2020
120  | 2017
130  | 2019
125  | 2011

根据“代码”列,我想找到每个名称的年份范围,如下所示:

code | Year | Range
115  | 2015 | 9
140  | 2020 | 9
120  | 2017 | 0
130  | 2019 | 0
125  | 2011 | 9

其实9是2020-2011

我的目标是编写一个循环次数最少的函数,以便快速处理大量数据。

标签: rdataframefunctionrange

解决方案


  1. left_join数据框由code
  2. group_by name
  3. 使用maxmin
df <- tribble(
~code, ~name,
115, "A",
120, "B",
125, "A",
130, "C",
140, "A")

df1 <- tribble(
~code, ~Year,
115, 2015,
140, 2020,
120, 2017,
130, 2019,
125, 2011)

df2 <- df1 %>% 
  left_join(df, by="code") %>% 
  group_by(name) %>% 
  mutate(Range = max(Year) - min(Year)) %>%
  select(-name)
df2

输出:

   code  Year name  Range
  <dbl> <dbl> <chr> <dbl>
1   115  2015 A         9
2   140  2020 A         9
3   120  2017 B         0
4   130  2019 C         0
5   125  2011 A         9

推荐阅读