计算 r 中的有效行数

Count the number of valid rows in r

我有一些行的计数练习 NA

这是一个示例数据集,其中包含 catid 个变量。

df <- data.frame(cat=c("A","A","A","B","B","C","C","C","C"),
                 id = c(11,12,13,NA,NA,21,21,23,24))

> df
  cat id
1   A 11
2   A 12
3   A 13
4   B NA
5   B NA
6   C 21
7   C 21
8   C 23
9   C 24

我想计算按 cat 分组的观察次数。

我试过了,但它也计算了类别 B 的 NA

df.1 <- df %>% 
  group_by(cat) %>%
  dplyr::summarise(freq=n())

> df.1
# A tibble: 3 x 2
  cat    freq
  <fct> <int>
1 A         3
2 B         2
3 C         4

我怎么能不数 NA 并简单地在该单元格中分配 NA,如下所示?

   > df.1
    # A tibble: 3 x 2
      cat    freq
      <fct> <int>
    1 A         3
    2 B         NA
    3 C         4

在逻辑向量(!is.na(id)complete.cases(id))上使用 sum,并将 NA 的 0 计数替换为 na_if

library(dplyr)
df %>% 
 group_by(cat) %>% 
 summarise(freq = na_if(sum(!is.na(id)), 0))

-输出

# A tibble: 3 × 2
  cat    freq
  <chr> <int>
1 A         3
2 B        NA
3 C         4

这是使用 ifelse 语句的替代方法:

library(dplyr)

df %>% 
  group_by(cat) %>% 
  mutate(freq = ifelse(!is.na(id), row_number(), NA)) %>% 
  summarise(freq=max(freq))
  cat    freq
  <chr> <int>
1 A         3
2 B        NA
3 C         4