计算列-R中有多少ID具有多个值

ajsxfq5m  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(129)

嗨,我有这个数据集:

>   id  s1 s2 s3 s4 
    1   "A"  "A"  "NA" "A"
    2   "NA"  "A"  "NA" "A"
    3   "Na"  "NA"  "NA" "A"
    4   "A"  "NA"  "NA" "Na"
    5   "A"  "A"  "NA" "A"

我想计算有多少ID在s1、s2、s3、s4中只有一个值“A”。在这种情况下,只有2个人(ID 3和4)。但如果我有一个大数据集,我如何计算呢?

qpgpyjmq

qpgpyjmq1#

您可以使用

which(rowSums(!is.na(df[-1])) == 1)

# [1] 3 4

which()替换为sum(),以获取只有1个非缺失值的ID的数量。

更新

如果不幸将所有NA存储为"NA""Na""na",则使用以下代码提前将它们转换回常规NA

df[] <- lapply(df, \(x) { x[x %in% c('NA', 'Na', 'na')] <- NA; x })
iq3niunx

iq3niunx2#

检查字符串中的“A”

library(tidyverse)

df %>%
  filter(rowSums(across(s1:s4, ~ str_detect(.x, "A")), na.rm = TRUE) == 1)

# A tibble: 2 × 5
     id s1    s2    s3    s4   
  <dbl> <chr> <chr> <lgl> <chr>
1     3 Na    NA    NA    A    
2     4 A     NA    NA    Na

相关问题