在行中用阈值过滤掉值并取平均值
Filtering out the value with a threshold among the rows and getting average
我有一个来自质谱测量的数据集。所以在这个小子集中有重复但强度不同的行或肽。
a <- dput(test_Data)
structure(list(UNIPROT = structure(c(2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("A8DUK4", "P08032", "P15508"), class = "factor"),
Intensity = c(16926.19, 36738.94, 2203.22, 5338.85, 133.44,
27991.35, 29505.84, 201.4695, 47469.09, 24841.01, 4546.9,
22805.69, 18494.71, 28805.99, 68220.65, 90526.29, 63259.19,
44492.48, 65497.13, 40704.81, 334874.1, 38702.87, 300135)), class = "data.frame", row.names = c(NA,
-23L))
数据框
UNIPROT Intensity
1 P08032 16926.1900
2 P08032 36738.9400
3 P08032 2203.2200
4 P08032 5338.8500
5 P08032 133.4400
6 P08032 27991.3500
7 P08032 29505.8400
8 P15508 201.4695
9 P15508 47469.0900
10 P15508 24841.0100
11 P15508 4546.9000
12 P15508 22805.6900
13 P15508 18494.7100
14 P15508 28805.9900
15 A8DUK4 68220.6500
16 A8DUK4 90526.2900
17 A8DUK4 63259.1900
18 A8DUK4 44492.4800
19 A8DUK4 65497.1300
20 A8DUK4 40704.8100
21 A8DUK4 334874.1000
22 A8DUK4 38702.8700
23 A8DUK4 300135.0000
所以我的objective
我必须只保留重复行中的一个值,但在取出平均值之后。
如果是我的第一个肽,我不想考虑这一行
5 P08032 133.4400
我的想法是只取出高于某个阈值的那些行,如果超过阈值则取平均值并添加或生成一个新的数据框,其中只保留唯一行及其平均值。
所以每个人都可以为这些单独的唯一行定义不同的阈值。
在我的小子集中,我有三个独特的行。那么我是否可以设置三个不同的阈值然后得到平均值 .
如有任何建议或帮助,我们将不胜感激
更新
尽管我从论文中读到人们认为是最大阈值。如果强度高于 5000,我可能会接受,但我再次不确定是否剩余的肽小于 5000,我该如何考虑。
但现在我将以 5000 为界。
分享3个方法解决上述问题
方法一:使用aggregate
函数
aggregate(test_Data[test_Data$Intensity >= 5000, 2], list(test_Data[test_Data$Intensity >= 5000, ]$UNIPROT), FUN = mean)
输出:
Group.1 x
1 A8DUK4 116268.06
2 P08032 23300.23
3 P15508 28483.30
方法二:使用dplyr
包
library(dplyr)
test_Data %>%
filter(Intensity >= 5000) %>%
group_by(UNIPROT) %>%
summarise(Mean_Intensity = mean(Intensity))
输出:
# A tibble: 3 x 2
UNIPROT Mean_Intensity
<fct> <dbl>
1 A8DUK4 116268.
2 P08032 23300.
3 P15508 28483.
方法三:使用data.table
包
library(data.table)
setDT(test_Data) # Converting to data.table object (necessary step)
test_Data[Intensity >= 5000,.(Mean_Intensity = mean(Intensity)), by = .(UNIPROT)]
输出:
UNIPROT Mean_Intensity
1: P08032 23300.23
2: P15508 28483.30
3: A8DUK4 116268.06
我有一个来自质谱测量的数据集。所以在这个小子集中有重复但强度不同的行或肽。
a <- dput(test_Data)
structure(list(UNIPROT = structure(c(2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("A8DUK4", "P08032", "P15508"), class = "factor"),
Intensity = c(16926.19, 36738.94, 2203.22, 5338.85, 133.44,
27991.35, 29505.84, 201.4695, 47469.09, 24841.01, 4546.9,
22805.69, 18494.71, 28805.99, 68220.65, 90526.29, 63259.19,
44492.48, 65497.13, 40704.81, 334874.1, 38702.87, 300135)), class = "data.frame", row.names = c(NA,
-23L))
数据框
UNIPROT Intensity
1 P08032 16926.1900
2 P08032 36738.9400
3 P08032 2203.2200
4 P08032 5338.8500
5 P08032 133.4400
6 P08032 27991.3500
7 P08032 29505.8400
8 P15508 201.4695
9 P15508 47469.0900
10 P15508 24841.0100
11 P15508 4546.9000
12 P15508 22805.6900
13 P15508 18494.7100
14 P15508 28805.9900
15 A8DUK4 68220.6500
16 A8DUK4 90526.2900
17 A8DUK4 63259.1900
18 A8DUK4 44492.4800
19 A8DUK4 65497.1300
20 A8DUK4 40704.8100
21 A8DUK4 334874.1000
22 A8DUK4 38702.8700
23 A8DUK4 300135.0000
所以我的objective
我必须只保留重复行中的一个值,但在取出平均值之后。
如果是我的第一个肽,我不想考虑这一行
5 P08032 133.4400
我的想法是只取出高于某个阈值的那些行,如果超过阈值则取平均值并添加或生成一个新的数据框,其中只保留唯一行及其平均值。
所以每个人都可以为这些单独的唯一行定义不同的阈值。
在我的小子集中,我有三个独特的行。那么我是否可以设置三个不同的阈值然后得到平均值 .
如有任何建议或帮助,我们将不胜感激
更新
尽管我从论文中读到人们认为是最大阈值。如果强度高于 5000,我可能会接受,但我再次不确定是否剩余的肽小于 5000,我该如何考虑。
但现在我将以 5000 为界。
分享3个方法解决上述问题
方法一:使用aggregate
函数
aggregate(test_Data[test_Data$Intensity >= 5000, 2], list(test_Data[test_Data$Intensity >= 5000, ]$UNIPROT), FUN = mean)
输出:
Group.1 x
1 A8DUK4 116268.06
2 P08032 23300.23
3 P15508 28483.30
方法二:使用dplyr
包
library(dplyr)
test_Data %>%
filter(Intensity >= 5000) %>%
group_by(UNIPROT) %>%
summarise(Mean_Intensity = mean(Intensity))
输出:
# A tibble: 3 x 2
UNIPROT Mean_Intensity
<fct> <dbl>
1 A8DUK4 116268.
2 P08032 23300.
3 P15508 28483.
方法三:使用data.table
包
library(data.table)
setDT(test_Data) # Converting to data.table object (necessary step)
test_Data[Intensity >= 5000,.(Mean_Intensity = mean(Intensity)), by = .(UNIPROT)]
输出:
UNIPROT Mean_Intensity
1: P08032 23300.23
2: P15508 28483.30
3: A8DUK4 116268.06