簡體   English   中英

R:跨 2 列按基因名稱分組

[英]R: group by gene name across 2 columns

我有一個相當簡單的問題......我找不到答案:/

所以我有以下 dataframe 列 node.1 和 node.2 包含基因名稱,每個基因可以同時出現在兩列中,因為每一行 node.1-node.2 表示 2 個基因之間的鏈接,而 wTO 列表示我想為每個基因計算的鏈接強度平均 wto 值,這意味着我需要一個 function 可以在這兩個列(node.1 和 node.2)中定位每個基因我想使用 group_by 或聚合,但我我正在努力尋找正確的語法以“搜索”兩列中的每個基因

我會很感激你的幫助,安娜

 'data.frame':  13799 obs. of  4 variables:
 $ Node.1: Factor w/ 1220 levels "ENSG00000004399",..: 76 616 102 349 349 366 102 360 360 360 ...
 $ Node.2: Factor w/ 1200 levels "ENSG00000004399",..: 363 113 382 1031 1034 1034 117 434 1103 516 ...
 $ wTO   : num  0.441 0.602 0.631 0.606 0.6 0.533 0.618 -0.326 -0.357 -0.354 ...
 $ abswTO: num  0.441 0.602 0.631 0.606 0.6 0.533 0.618 0.326 0.357 0.354 ...

             Node.1          Node.2    wTO abswTO
1   ENSG00000107404 ENSG00000224459  0.441  0.441
2   ENSG00000242590 ENSG00000116809  0.602  0.602
3   ENSG00000116809 ENSG00000226526  0.631  0.631
4   ENSG00000221978 ENSG00000272084  0.606  0.606
5   ENSG00000221978 ENSG00000272478  0.600  0.600
6   ENSG00000224870 ENSG00000272478  0.533  0.533
7   ENSG00000116809 ENSG00000121905  0.618  0.618
8   ENSG00000224387 ENSG00000229537 -0.326  0.326
9   ENSG00000224387 ENSG00000285778 -0.357  0.357
10  ENSG00000224387 ENSG00000234184 -0.354  0.354
11  ENSG00000230402 ENSG00000285525  0.409  0.409
12  ENSG00000224459 ENSG00000270066  0.401  0.401
13  ENSG00000234184 ENSG00000270066 -0.319  0.319
14  ENSG00000221978 ENSG00000237781  0.593  0.593

所以為簡單起見,以下是我的 dataframe

    node.1 node.2  wto
1      A      Z 0.20
2      B      A 1.00
3      D      F 3.00
4      F      W 0.80
5      R      A 0.90
6      C      D 0.66

我想計算基因 A 的結果 mean=( 0.2+1+0.9)/3

這樣的事情怎么樣?

library('dplyr')

gene1 <- df[, c("Node.1", "wTO")]; colnames(gene1)[1] <- 'gene'
gene2 <- df[, c("Node.2", "wTO")]; colnames(gene2)[1] <- 'gene'

df_long = rbind(gene1, gene2)

df_long %>% 
  group_by(gene) %>% 
  summarise(mean_wTO=mean(wTO))
df <- data.frame(
  stringsAsFactors = FALSE,
  node.1 = c("A", "B", "D", "F", "R", "C"),
  node.2 = c("Z", "A", "F", "W", "A", "D"),
  wto = c(0.2, 1, 3, 0.8, 0.9, 0.66)
)

library(tidyverse)
df %>% pivot_longer(-wto, values_to = "gene") %>% 
  group_by(gene) %>% 
  summarise(wto = mean(wto))

#> # A tibble: 8 x 2
#>   gene    wto
#>   <chr> <dbl>
#> 1 A      0.7 
#> 2 B      1   
#> 3 C      0.66
#> 4 D      1.83
#> 5 F      1.9 
#> 6 R      0.9 
#> 7 W      0.8 
#> 8 Z      0.2

reprex package (v2.0.1) 創建於 2022-03-23

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM