在新列中显示该类别中每个类别的计数

时间:2018-04-09 08:29:29

标签: r count dplyr

我有以下数据框

g <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6)
m <- c(1, NA, NA, NA, 3, NA, 2, 1, 3, NA, 3, NA, NA, 4, NA, NA, NA, 2, 1, NA, 7, 3, NA, 1)
df <- data.frame(g, m)

我想显示每个类别g(1到6)的非NA值的数量,我按其计算:

  > df %>% group_by(g) %>% summarise(non_na_count = sum(!is.na(m)))
    # A tibble: 6 x 2
          g non_na_count
      <dbl>        <int>
    1    1.            1
    2    2.            3
    3    3.            2
    4    4.            1
    5    5.            2
    6    6.            3

现在我想生成一个新列l,它显示每行中每个类别的NA值的数量,结果如下:

   g  m l
1  1  1 1
2  1 NA 1
3  1 NA 1
4  1 NA 1
5  2  3 3
6  2 NA 3
7  2  2 3
8  2  1 3
9  3  3 2
10 3 NA 2
11 3  3 2
12 3 NA 2
13 4 NA 1
14 4  4 1
15 4 NA 1
16 4 NA 1
17 5 NA 2
18 5  2 2
19 5  1 2
20 5 NA 2
21 6  7 3
22 6  3 3
23 6 NA 3
24 6  1 3

任何人都知道如何做到这一点:)?

2 个答案:

答案 0 :(得分:1)

我们需要mutate来创建列

df %>% 
 group_by(g) %>% 
 mutate(non_na_count = sum(!is.na(m)))

答案 1 :(得分:0)

你快到了。您需要做的是收集group by的输出并将其添加回原始df。

df_notna <- df %>% group_by(g) %>% summarise(non_na_count = sum(!is.na(m))) total <- merge(df,df_notna,by="g") 查看其他合并方式:https://www.statmethods.net/management/merging.html