统计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
相关产品推荐
相关产品推荐

