【问题标题】:possible combinations of a dataset and average of corresponding column using r使用 r 的数据集和相应列的平均值的可能组合
【发布时间】:2017-04-27 10:23:18
【问题描述】:

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

【问题讨论】:

  • “为此,我使用了“combinat”包中的combn函数,下面有输出“——在你的问题中包含这个代码。
  • @AmrithaAmarnath 您是否通过pasted 使用combn 的两行输出来创建第二个数据集?
  • 是的,我确实使用粘贴将它们放在一起。我做了一个小功能。组合

标签: r dataframe combinations average


【解决方案1】:

我们可以使用tidyverse 来执行此操作。第二个数据集的'value'列(基于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

【讨论】:

  • 也可以使用mutate(h2 = Hits) %&gt;% expand(Hits, h2) 代替combinat
  • 非常感谢@akrun 的回答。它确实帮助了我很多
  • @akrun 是的。还需要一个过滤器filter(Hits != h2)
  • 当我使用“tidyverse”包中的上述代码时。它确实检索了 RA 值,但为 RA.x 、 RA.y 和一些警告提供了 NA。有人可以通过指出为什么会发生这种情况来提供帮助。提前谢谢你。
  • @AmrithaAmarnath 根据你的例子,它对我来说很好。
猜你喜欢
  • 2022-07-08
  • 2020-12-07
  • 2014-11-19
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2017-12-22
相关资源
最近更新 更多