Построение строк для каждого значения столбца в матрице - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть файл входной матрицы в формате csv, например:

         x     y      z
a1_b1   0.6   0.44   0.6
a1_b2   0.9   0.1    0.04
a2_b1   0.7   0.02   0.7
a2_b2   0.5    0.4   0.11

Исходя из этого, я хочу провести посимвольный расчет значений b # с различной комбинацией a .. Вывод модели для приведенной выше матрицы будет выглядеть следующим образом:

    *_b1    *_b2   *_b2-*_b1     Calculate_Positives (for each variable)
x   0.6      0.9     -0.3       =# of positive values for x (in 4th column)/# of x 
x   0.7      0.5      0.2
y   0.44     0.1      0.34      =# of positive values for y/# of y
y   0.02     0.4     -0.38
z   0.6      0.04     0.56      =# of positive values for z/# of z
z   0.7      0.11     0.59 

Я буду очень признателен, если кто-нибудь предложит какой-либо код awk / sed / r для вышеперечисленного.

Пожалуйста, смотрите файл модели (в формате csv) ниже и ниже.

Input

выход

1 Ответ

0 голосов
/ 02 ноября 2018

Вот решение tidyverse

library(tidyverse)

df %>%
    rownames_to_column("id") %>%
    gather(row, value, -id) %>%
    separate(id, into = c("tmp", "col")) %>%
    spread(col, value) %>%
    select(-tmp) %>%
    arrange(row) %>%
    mutate(`b1-b2` = b1 - b2)
#  row   b1   b2 b1-b2
#1   x 0.60 0.90 -0.30
#2   x 0.70 0.50  0.20
#3   y 0.44 0.10  0.34
#4   y 0.02 0.40 -0.38
#5   z 0.60 0.04  0.56
#6   z 0.70 0.11  0.59

Обновление

df %>%
    rownames_to_column("id") %>%
    gather(row, value, -id) %>%
    separate(id, into = c("tmp", "col")) %>%
    spread(col, value) %>%
    select(-tmp) %>%
    arrange(row) %>%
    mutate(`b1-b2` = b1 - b2) %>%
    group_by(row) %>%
    summarise(no_positives = sum(`b1-b2` > 0) / n())
## A tibble: 3 x 2
#  row   no_positives
#  <chr>        <dbl>
#1 x              0.5
#2 y              0.5
#3 z              1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...