检查数据表列中的值,并根据 R 中的条件返回新表



我有这样的表格:

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

一种dplyrtidyr的可能性可能是:

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))

最新更新