我有一个超过3000行和超过100个字节的数据帧(Tibble).我想每隔5列(例如,StoZ.x、StoZ.y、StoZ.x.x、StoZ.y.y)计算一下是否存在任何数据.如果数据出现在第5列,则将通过创建新列来添加总计数.

A tibble: 1,500 × 23
chr     start   end.x   end.y StoZ.x Tier.x Gene.x cohort.x    end.x.x StoZ.y Tier.y Gene.y cohort.y
> >    <chr>   <dbl>   <dbl>   <dbl>  <dbl> <chr>  <chr>  <chr>         <dbl>  <dbl> <chr>  <chr>  <chr>   
1 chr1  2220001 2230000 2230000  -2.68 T2     SKI    cr19naBile…      NA  NA    NA     NA     NA      
2 chr1  2230001 2240000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA      
3 chr1  2240001 2250000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA      
4 chr1  2250001 2260000 2260000  -2.24 T2     SKI    cr19naBile… 2260000  -2.90 T2     SKI    ji15pnH…
5 chr1  2270001 2280000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA      
6 chr1  2280001 2290000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA      
7 chr1  2290001 2300000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA      
8 chr1  2550001 2560000      NA  NA    NA     NA     NA          2560000  -2.13 T1     TNFRS… ji15pnH…

预期的表格应该是这样的,添加的列计数将引用特定窗口中基因的存在.

A tibble: 1,500 × 23
chr     start   end.x   end.y StoZ.x Tier.x Gene.x cohort.x    end.x.x StoZ.y Tier.y Gene.y cohort.y   Count
> > >    <chr>   <dbl>   <dbl>   <dbl>  <dbl> <chr>  <chr>  <chr>         <dbl>  <dbl> <chr>  <chr>  <chr>   <num>
1 chr1  2220001 2230000 2230000  -2.68 T2     SKI    cr19naBile…      NA  NA    NA     NA     NA 1          
2 chr1  2230001 2240000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA 0     
3 chr1  2240001 2250000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA 0      
4 chr1  2250001 2260000 2260000  -2.24 T2     SKI    cr19naBile… 2260000  -2.90 T2     SKI    ji15pnH…. 2
5 chr1  2270001 2280000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA 0     
6 chr1  2280001 2290000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA 0     
7 chr1  2290001 2300000      NA  NA    NA     NA     NA               NA  NA    NA     NA     NA 0     
8 chr1  2550001 2560000      NA  NA    NA     NA     NA          2560000  -2.13 T1     TNFRS… ji15pnH… 1

推荐答案

您可以使用dplyr包中的pick来 Select 名称以"StoZ"开头的列,并逐行对非NA值的数量求和.

library(dplyr) # packageVersion("dplyr") >= 1.1.0

ndf |> 
  mutate(count = rowSums(!is.na(pick(starts_with("StoZ")))))

#>    chr   start   end.x   end.y StoZ.x Tier.x Gene.x    cohort.x end.x.x StoZ.y Tier.y Gene.y cohort.y count
#> 1 chr1 2220001 2230000 2230000  -2.68     T2    SKI cr19naBile…      NA     NA   <NA>   <NA>     <NA>     1
#> 2 chr1 2230001 2240000      NA     NA   <NA>   <NA>        <NA>      NA     NA   <NA>   <NA>     <NA>     0
#> 3 chr1 2240001 2250000      NA     NA   <NA>   <NA>        <NA>      NA     NA   <NA>   <NA>     <NA>     0
#> 4 chr1 2250001 2260000 2260000  -2.24     T2    SKI cr19naBile… 2260000  -2.90     T2    SKI ji15pnH…     2
#> 5 chr1 2270001 2280000      NA     NA   <NA>   <NA>        <NA>      NA     NA   <NA>   <NA>     <NA>     0
#> 6 chr1 2280001 2290000      NA     NA   <NA>   <NA>        <NA>      NA     NA   <NA>   <NA>     <NA>     0
#> 7 chr1 2290001 2300000      NA     NA   <NA>   <NA>        <NA>      NA     NA   <NA>   <NA>     <NA>     0
#> 8 chr1 2550001 2560000      NA     NA   <NA>   <NA>        <NA> 2560000  -2.13     T1 TNFRS… ji15pnH…     1

R相关问答推荐

如何提高以键ID为列的表中键查找的效率?

更改网格的crs以匹配简单要素点对象的crs

如何替换R中数据集列中的各种字符串

如何通过Docker部署我的shiny 应用程序(多个文件)

如何直接从Fortran到R的数组大小?

使用geom_segment()对y轴排序

为什么当用osmdata映射R时会得到相邻状态?

使用R闪光显示所有数据点作为默认设置

如何从像glm这样的模型中提取系数表的相关性?

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

如何在R中描绘#符号?

如何用书面利率绘制geom_bar图

方法::slotName如何处理非类、非字符的参数?

将一个字符串向量调整为与其他字符串向量完全相同的大小

将多个列值转换为二进制

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

随机森林的带Shap值的蜂群图

用满足特定列匹配的另一行替换NA行

在ggplot2图表中通过端点连接点

附加中缀操作符