分组到所需数量的组

Grouping into desired number of groups

我有一个这样的数据框: ID是主键,Apples是这个人拥有的苹果数量。

ID Apples
E1 10
E2 5
E3 NA
E4 5
E5 8
E6 12
E7 NA
E8 4
E9 NA
E10 8

我想将 NA 和非 NA 值分成 2 个单独的组,并计算每个组的数量。我尝试了正常的 group_by(),但它没有给我想要的输出。

Fruits %>% group_by(Apples) %>% summarize(n())

Apples    n()
<dbl>    <int>
 4         1            
 5         2            
 8         2            
 10        1            
 12        1            
 NA        3

我想要的输出:

Apples    n()
<dbl>    <int>
 non-NA    7                    
 NA        3

我们可以使用 group_byNA 和 non-NA 创建一个组,我们也可以将其作为一个因素,以便我们可以在同一步骤中更改标签。然后,获取每个组的观察次数。

library(dplyr)

df %>% 
  group_by(grp = factor(is.na(Apples), labels=c("non-NA", "NA"))) %>% 
  summarise(`n()`= n())

#  grp     `n()`
#  <fct>  <int>
#1 non-NA     7
#2 NA         3

或者在 base R 中,我们可以使用 colSums:

data.frame(Apples = c("non-NA", "NA"), n = c(colSums(!is.na(df))[2], colSums(is.na(df))[2]), row.names = NULL)

数据

df <- structure(list(ID = c("E1", "E2", "E3", "E4", "E5", "E6", "E7", 
"E8", "E9", "E10"), Apples = c(10L, 5L, NA, 5L, 8L, 12L, NA, 
4L, NA, 8L)), class = "data.frame", row.names = c(NA, -10L))

base R中,这可以用table在逻辑向量

上完成
table(!is.na(df1$Apples))