You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计tibble中每第5列非NA值数量并新增Count列

统计tibble中指定列的非NA值数量并新增Count列

问题描述

我有一个包含3000多行、100多列的tibble数据框,需要统计每第5列(如StoZ.x、StoZ.y、StoZ.x.x、StoZ.y.y等)的非NA值存在情况,为每行统计符合条件的列的数量,并新增Count列存储该统计结果。

原始数据示例

# 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 × 24
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>   <int>
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结合rowSums可以高效实现需求,代码如下:

library(dplyr)

# 替换df为你的实际数据框名称
df <- df %>%
  mutate(Count = rowSums(!is.na(select(., seq(5, ncol(.), by = 5)))))

代码解释

  • seq(5, ncol(.), by = 5):生成从第5列开始、步长为5的列索引,自动适配数据框的总列数
  • select(., ...):选中所有符合条件的第5、10、15...列
  • !is.na():将非NA值转换为TRUE(对应数值1),NA值转换为FALSE(对应数值0)
  • rowSums():对每行的转换结果求和,得到该行中非NA值的数量,存入新增的Count列

内容的提问来源于stack exchange,提问作者Debajyoti Kabiraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:18:12