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

时间:2017-06-10 14:52:29

标签: r function dataframe calculated-columns

对于R和编程而言,我是一个非常新手所以任何帮助都会非常感激。我有一个包含许多行的大型数据集,其中包含100多个不同的ID。每个ID'有4个数字。每个号码'有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

我想知道是否有可能创建一个功能来减去“开始”'来自'结束'每个记录确定哪个是最长的'数字'。我希望输出如......

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

在哪里' xxxxxx'是计算出的最长长度的输出。

是否也可以选择最大的错误'每个'数字'使用功能?也许上面的长度输出有类似的输出?

不太清楚如何解决这个问题。再次,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我们可以使用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))