Поиск уникальных переменных - PullRequest
0 голосов
/ 14 июля 2020

У меня есть три фрейма данных (лес, сельское хозяйство и город), каждый из которых имеет 1 строку и 24145 столбцов (см. Пример внизу). Каждый столбец представляет другую молекулярную формулу, а значение в каждой ячейке соответствует относительному количеству этой формулы в образце (лес, сельское хозяйство и город).

Я пытаюсь найти лучший способ найдите, какие молекулярные формулы уникальны для каждого из трех приведенных выше образцов. Например, если у меня есть одна молекулярная формула (C10H10), которая имеет значение 0,12 для леса, но 0 для сельского хозяйства и города, я хочу иметь возможность получить конечный продукт, который показывает, что конкретная формула присутствует только в образце леса. .

В конечном итоге, я хочу затем построить график с этим конечным продуктом, где я могу нанести информацию о молекулярной формуле на оси (отношение кислорода к углероду на x и отношение водорода к углероду на y) и иметь отдельные точки на графике, соответствующие этим уникальным формулам, с цветовой кодировкой, чтобы обозначить, в каком образце они были однозначно найдены.

Заранее спасибо!

Маленький пример ввода с тремя отдельные фреймы данных объединены в один, называемый Образцами (на самом деле введено 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

1 Ответ

0 голосов
/ 14 июля 2020

С данными примера:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...