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"是计算的最长长度的输出。
是否也可以使用函数选择每个"数字"中最大的"误差"?也许具有与上面的长度输出相似的输出?
不太确定如何解决这个问题。同样,任何帮助将不胜感激。
我们可以使用data.table
. 将"data.frame"转换为"data.table"(setDT(df1)
(,按"ID","数字"分组,得到"结束","开始"的差值并找到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))