首页 > 解决方案 > 寻找唯一变量

问题描述

我有三个数据框(森林、农业和城市),每个数据框有 1 行和 24145 列(参见底部的示例)。每列代表一个不同的分子式,每个单元格中的值对应于样本(森林、农业和城市)中该分子式的相对数量。

我试图找出最好的方法来找出上面三个样品中的每一个都有哪些分子式。例如,如果我有一个分子式 (C10H10),其森林的值为 0.12,但农业和城市的值为 0,我希望能够获得一个最终产品,表明该特定公式仅存在于森林样本中.

最终,我想用这个最终产品绘制一个图,在其中我可以在轴上绘制分子式信息(x 上的氧与碳的比率以及 y 上的氢与碳的比率)并在图中有各个点对应于那些独特的公式,颜色编码以表示它们是在哪个样本中唯一发现的。

提前致谢!

输入的小例子,三个独立的数据框组合成一个称为 Samples 的数据框(实际上输入有 24145 个不同的分子式,而不仅仅是这里列出的 4 个):

              C10H10O3N1S0   C10H1004N1S0    C10H10O5N1S0  C10H10O5N1S1
Forest        0.00           1.44            0.00          0.00
Agriculture   0.00           0.00            1.11          4.94
Urban         1.29           0.00            1.33          0.00

标签: r

解决方案


使用示例数据:

df <- data.frame(Forest=0:20,Agriculture=10:30,Urban=c(10:20,51:60))

   Forest Agriculture Urban
1       0          10    10
2       1          11    11
3       2          12    12
4       3          13    13
5       4          14    14
6       5          15    15
7       6          16    16
8       7          17    17
9       8          18    18
10      9          19    19
11     10          20    20
12     11          21    51
13     12          22    52
14     13          23    53
15     14          24    54
16     15          25    55
17     16          26    56
18     17          27    57
19     18          28    58
20     19          29    59
21     20          30    60

我们可以做这样的事情

uniquevals <- list()

for(i in 1:ncol(df)){
 uniquevals[[i]] <- df[,i][rowSums(apply(df[,-i],2, function(x) df[,i] %in% x)) == 0]
}

names(uniquevals) <- colnames(df)

获取每个列表

> uniquevals
$Forest
 [1] 0 1 2 3 4 5 6 7 8 9

$Agriculture
 [1] 21 22 23 24 25 26 27 28 29 30

$Urban
 [1] 51 52 53 54 55 56 57 58 59 60

推荐阅读