使用特定列的值从其他行中减去,但列索引在 R 中的文件之间移动
Using a specific column's values to subtract from other rows but the column index moves between files in 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
然后我将 运行 两个表中的渔民以获得每个变体和每个基因 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 等函数中位于不同位置的列?
非常感谢
您可以 select 按名称中的位置或模式或指定列范围来命名列。这取决于您的数据结构。
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, 9L, 2L,
1L, 0L), AKI = c(4L, 5L, 6L, 0L, 8L, 6L), CKD = c(0L, 9L, 7L,
6L, 4L, 3L), CCF = c(0L, 0L, 0L, 5L, 2L, 3L), IHD = c(4L, 7L,
3L, 4L, 5L, 1L)), class = "data.frame", row.names = c(NA, -6L))
数据 我还有癌症患者 (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
然后我将 运行 两个表中的渔民以获得每个变体和每个基因 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 等函数中位于不同位置的列?
非常感谢
您可以 select 按名称中的位置或模式或指定列范围来命名列。这取决于您的数据结构。
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, 9L, 2L,
1L, 0L), AKI = c(4L, 5L, 6L, 0L, 8L, 6L), CKD = c(0L, 9L, 7L,
6L, 4L, 3L), CCF = c(0L, 0L, 0L, 5L, 2L, 3L), IHD = c(4L, 7L,
3L, 4L, 5L, 1L)), class = "data.frame", row.names = c(NA, -6L))