我有这样的表格:
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 1 7512 1 0 0 0 0 0
1 7506 10949 0 0 0 0 0 1
1 10943 13175 0 0 0 0 0 0
1 13169 20070 0 1 1 0 0 0
表中的每一行都是一个片段,因此碎点为 4。Con1 包括 V4、V5、V6 和 con2 V7、V8、V9 我想在 R 中创建一个新表,在其中我将检查 con1 和 con 2 中的元素是零还是一。如果每个条件的元素中至少有 1 个,则未覆盖 所以表格将如下所示:
label fragnum covered uncovered
con1 4 2 2
con2 4 1 3
一种dplyr
和tidyr
的可能性可能是:
df %>%
transmute(con1 = if_else(rowSums(select(., V4:V6)) > 0, "covered", "uncovered"),
con2 = if_else(rowSums(select(., V7:V9)) > 0, "covered", "uncovered"),
fragnum = n()) %>%
pivot_longer(names_to = "variables", values_to = "values", -fragnum) %>%
count(fragnum, variables, values) %>%
pivot_wider(names_from = "values", values_from = "n")
fragnum variables covered uncovered
<int> <chr> <int> <int>
1 4 con1 2 2
2 4 con2 1 3
在base中,您可以将rowSums
用于特定列以查看每行是否有任何 1,例如:
tt <- sapply(list(c("V4", "V5", "V6"), c("V7", "V8", "V9"))
, function(i) sum(rowSums(x[,i]) > 0))
data.frame(label=c("con1", "con2"), fragnum=nrow(x), covered=tt
, uncovered=nrow(x) - tt)
# label fragnum covered uncovered
#1 con1 4 2 2
#2 con2 4 1 3
数据:
x <- structure(list(V1 = c(1L, 1L, 1L, 1L), V2 = c(1L, 7506L, 10943L,
13169L), V3 = c(7512L, 10949L, 13175L, 20070L), V4 = c(1L, 0L,
0L, 0L), V5 = c(0L, 0L, 0L, 1L), V6 = c(0L, 0L, 0L, 1L), V7 = c(0L,
0L, 0L, 0L), V8 = c(0L, 0L, 0L, 0L), V9 = c(0L, 1L, 0L, 0L))
, class = "data.frame", row.names = c(NA, -4L))