创建函数以在数据框中选择列中的最大数字的 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))
就 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))