我有一个名为" Hits"下面给出了一些值
Hits RA
1 A415Z 1.01
2 A415J 0.91
3 B416X 0.95
4 B416Z 0.97
5 B416J 1.03
6 B416M 1.16
7 B416P 11.75
8 B416W 0.98
9 D420R 0.98
10 D420H 0.94
11 D420Z 1.01
12 D420J 1.01
13 D420F 0.9
14 D420L 1
15 C462H 0.93
16 C462P 0.83
17 C462W 0.73
现在,我想将这个数据集组合成2的符号,因为我使用了这个函数 从包装中梳理出来" combinat"并且下面有输出。以下给出的输出仅代表头部 数据集。
value
1 A415Z A415J
2 A415Z B416X
3 A415Z B416Z
4 A415Z B416J
5 A415Z B416M
我想创建另一个列,其中每行中的每个匹配都会获得相应的RA值 从原始数据帧和要获得的RA的平均值,使得输出看起来像这一个数据帧 如下。
value RA
1 A415Z A415J 0.96
2 A415Z B416X 0.98
3 A415Z B416Z 0.99
4 A415Z B416J 1.02
5 A415Z B416M 1.08
答案 0 :(得分:1)
我们可以使用tidyverse
来执行此操作。价值'第二个数据集中的列(基于combinat
输出)被分为两列,而left_join
包含第一个数据集以获得' RA'值,获取感兴趣的列的mean
和select
library(tidyverse)
separate(df2, value, into = c('value1', 'value2'), remove = FALSE) %>%
left_join(., df1, by = c(value1 = 'Hits')) %>%
left_join(., df1, by = c(value2= 'Hits')) %>%
mutate(RA= round((RA.x+RA.y)/2, 2)) %>%
select(-RA.x, -RA.y, -value1, -value2)
# value RA
#1 A415Z A415J 0.96
#2 A415Z B416X 0.98
#3 A415Z B416Z 0.99
#4 A415Z B416J 1.02
#5 A415Z B416M 1.08
这也可以通过base R
RA1 <- utils::combn(df1[,1], 2, FUN = function(x) mean(df1[,2][match(x, df1[,1])]))
d1 <- as.data.frame(t(utils::combn(df1[,1], 2)))
d1$RA <- round(RA1, 2)
head(d1)
# V1 V2 RA
#1 A415Z A415J 0.96
#2 A415Z B416X 0.98
#3 A415Z B416Z 0.99
#4 A415Z B416J 1.02
#5 A415Z B416M 1.08
#6 A415Z B416P 6.38