如何解决使用特定列的值从其他行中减去,但列索引在R中的文件之间移动
数据 我也有癌症患者总数(case_totals)和非癌症患者总数(control_totals),在这种情况下分别为100和1000。
Variant Cancer IBD AKI CKD CCF IHD
A1 0 5 4 0 0 4
A2 0 8 5 9 0 7
A3 20 9 6 7 0 3
B5 7 2 0 6 5 4
K7 9 1 8 4 2 5
L9 0 0 6 3 3 1
所需结果-两个表: 表1:
Variant case_total not_seen_in_cases_total control_total not_seen_in_control_total
A1 0 100 13 987
A2 0 100 25 975
A3 20 80 25 975
B5 7 93 17 983
K7 9 91 20 980
L9 0 100 13 987
表2:
case_total_in_gene not_seen_in_gene_cases control_total_in_gene control_total_not_in_gene
36 64 113 887
然后,我将在两个表之间运行一条Fisher,以获取我可以做的每个变体和每个基因的p.value。
我的问题是我有多个这样的数据集,并且在每个输入列的顺序上都是不同的。目前,我一直在使用:
ncol(dt) #to get the total number of columns as in reality the table is very large
which(colnames(dt)=='Cancer') #get the index column
dt$control_total <- (rowSums(dt[,2:7])) - rowSums(dt[,2]) #get a control totals per row column
然后设置dt,然后仅使用减法将其他列添加进去,例如dt$not_seen_in_control_total <- 1000 - dt$control_total
这不适用于移动列索引,而我想理想地使用commandArgs在数百个文件中运行它。
最终我该如何引用一列始终相同的名称,但在诸如RowSums等的函数中却位于不同的位置?
非常感谢
解决方法
您可以通过名称中的位置或样式或通过指定列范围来选择列名称。这取决于您的数据结构。
library(dplyr)
table1 <- df %>%
mutate(control_total = rowSums(select(.,setdiff(2:ncol(.),match('Cancer',names(.)))))) %>%
transmute(Variant,Cancer,not_seen_in_cases_total = 100 - Cancer,control_total,not_seen_in_control_total = 1000 - control_total)
table1
# Variant Cancer not_seen_in_cases_total control_total not_seen_in_control_total
#1 A1 0 100 13 987
#2 A2 0 100 29 971
#3 A3 20 80 25 975
#4 B5 7 93 17 983
#5 K7 9 91 20 980
#6 L9 0 100 13 987
table2 <- table1 %>%
summarise(case_total_in_gene = sum(Cancer),not_seen_in_gene_cases = 100 - case_total_in_gene,control_total_in_gene = sum(control_total),control_total_not_in_gene = 1000 - control_total_in_gene)
table2
# case_total_in_gene not_seen_in_gene_cases control_total_in_gene control_total_not_in_gene
#1 36 64 117 883
数据
df <- structure(list(Variant = c("A1","A2","A3","B5","K7","L9"
),Cancer = c(0L,0L,20L,7L,9L,0L),IBD = c(5L,8L,2L,1L,AKI = c(4L,5L,6L,6L),CKD = c(0L,4L,3L),CCF = c(0L,IHD = c(4L,3L,1L)),class = "data.frame",row.names = c(NA,-6L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。