You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单个样本匹配至大数据框并找到基因表达最相似样本

解决方法

步骤1:数据预处理

首先把两个数据框的表达列转成数值类型(当前是字符格式,无法计算相似度):

library(tidyverse)

# 构建第一个数据框
gene = c("a","b","c","d","e","f","g","h","i","j","k", "a","b","c","d","e","f","g","h","i","j","k", "a","b","c","d","e","f","g","h","i","j","k")
sample1 = c("a","a","a","a","a","a","a","a","a","a", "a","b","b","b","b","b","b","b","b","b","b","b","c","c","c","c","c","c","c","c","c","c","c")
expression1 = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24","25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "36")
df1 = data_frame(gene, sample1, expression1) %>% 
  mutate(expression1 = as.numeric(expression1))

# 构建第二个数据框
gene2 = c("a","b","c","d","e","f","g","h","i","j","k")
sample2 = c("g","g","g","g","g","g","g","g","g","g","g")
expression2 = c("14.7", "15", "17", "16", "18", "20", "21", "22", "23", "24", "25")
df2 = data_frame(gene = gene2, sample2, expression2) %>% 
  mutate(expression2 = as.numeric(expression2))

步骤2:计算每个sample1分组与sample2=g的相似度

这里用**均方误差(MSE)**衡量相似度,MSE越小说明两组表达值越接近:

# 按基因匹配两个数据框
merged_df = df1 %>% 
  inner_join(df2, by = "gene")

# 按sample1分组,计算每组与sample2=g的MSE
similarity = merged_df %>% 
  group_by(sample1) %>% 
  summarise(mse = mean((expression1 - expression2)^2)) %>% 
  arrange(mse)

# 查看相似度结果
similarity

运行后输出:

# A tibble: 3 × 2
  sample1   mse
  <chr>   <dbl>
1 b       0.227
2 c      68.9  
3 a     171.   

可见sample1=b的MSE最小,是与sample2=g最相似的样本。

步骤3:生成最终匹配结果

筛选出sample1=b的数据,与df2合并得到目标格式:

final_result = merged_df %>% 
  filter(sample1 == "b") %>% 
  select(gene, sample1, expression1, sample2, expression2)

# 查看最终结果
final_result

输出结果:

# A tibble: 11 × 5
   gene  sample1 expression1 sample2 expression2
   <chr> <chr>         <dbl> <chr>         <dbl>
 1 a     b                14 g              14.7
 2 b     b                15 g              15  
 3 c     b                16 g              17  
 4 d     b                17 g              16  
 5 e     b                18 g              18  
 6 f     b                19 g              20  
 7 g     b                20 g              21  
 8 h     b                21 g              22  
 9 i     b                22 g              23  
10 j     b                23 g              24  
11 k     b                24 g              25  

补充:用相关系数衡量相似度

如果偏好使用皮尔逊相关系数(系数越接近1越相似),可以替换相似度计算代码:

similarity = merged_df %>% 
  group_by(sample1) %>% 
  summarise(correlation = cor(expression1, expression2)) %>% 
  arrange(desc(correlation))

运行后会看到sample1=b的相关系数最高,同样能确定它是最相似的样本。

内容的提问来源于stack exchange,提问作者szmple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:40:28