创建函数以在数据框中选择列中的最大数字的 2 列之间进行计算

Creating function to calculate between 2 columns in dataframe selecting largest number in column

就 R 和一般编程而言,我是新手,因此非常感谢任何帮助。我有一个大型数据集,其中包含许多行和超过 100 个不同的 ID。每个 'ID' 有 4 个数字。每个'Number'有5条记录。

     ID Number     start       end   s.mean  Error
1   A2    1        61735  23342732   0.0314  2.04
2   A2    1     23345569  54962669  -0.0103  1.98
3   A2    1     54963958  55075062   0.4841  2.79
4   A2    1     55085141  65826284   0.0047  2.00
5   A2    1     65826928 115611498  -0.0241  1.96
6   A2    2        12784  17248573  -0.0037  1.99
7   A2    2     17248890  85480817  -0.0331  1.95
8   A2    2     85481399  89121495   0.0153  2.02
9   A2    2     89122081  89417610   0.3708  2.58
10  A2    2     89418929  89999062  -0.1826  1.76
11  A2    3    162626603 185477402  -0.0759  1.89
12  A2    3    185478957 189050664   0.0080  2.01
13  A2    3    189056732 192873807  -0.0985  1.86
14  A2    3    192874747 192882903   0.9053  3.74
15  A2    3    192886435 197896118  -0.0645  1.91
16  A3    1        61735  23342732   0.0314  2.04
17  A3    1     23345569  54962669  -0.0103  1.98
18  A3    1     54963958  55075062   0.4841  2.79
19  A3    1     55085141  65826284   0.0047  2.00
20  A3    1     65826928 115611498  -0.0241  1.96

我想知道是否可以创建一个函数,从每条记录的 'end' 中减去 'start',以确定哪个是每个 'Number' 中最长的。我希望输出如...

    ID   Number   Length 
1   A2    1       xxxxxx
2   A2    2       xxxxxx
3   A2    3       xxxxxx
4   A3    1       xxxxxx

其中'xxxxxx'是计算的最长长度的输出。

是否也可以使用函数 select 每个 'Number' 中最大的 'Error'?也许与上面的 Length 输出有类似的输出?

不太确定如何解决这个问题。同样,我们将不胜感激。

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'ID'、'Number'分组,得到'end'、'start'的差值并找到 max

library(data.table)
setDT(df1)[, .(Length = max(end - start)), .(ID, Number)]

dplyr

library(dplyr)
df1 %>%
    group_by(ID, Number) %>%
    summarise(Length = max(end - start))