数据集的可能组合和使用r

时间:2017-04-27 10:23:19

标签: r dataframe combinations average

我有一个名为" 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

1 个答案:

答案 0 :(得分:1)

我们可以使用tidyverse来执行此操作。价值'第二个数据集中的列(基于combinat输出)被分为两列,而left_join包含第一个数据集以获得' RA'值,获取感兴趣的列的meanselect

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