对于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'是计算出的最长长度的输出。
是否也可以选择最大的错误'每个'数字'使用功能?也许上面的长度输出有类似的输出?
不太清楚如何解决这个问题。再次,任何帮助将不胜感激。
答案 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))