我有一个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格式)的输入和输出文件。
答案 0 :(得分:0)
这是一个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