我想创建两个变量,以id的形式给出正负总数,希望使用dplyr

示例数据:

library(dplyr)
set.seed(42)
    df <- data.frame (id=rep(1:10,each=10),
                      ff=rnorm(100, 0,14 ))
> head(df,20)
   id          ff
1   1  19.1934183
2   1  -7.9057744
3   1   5.0837978
4   1   8.8600765
5   1   5.6597565
6   1  -1.4857432
7   1  21.1613080
8   1  -1.3252265
9   1  28.2579320
10  1  -0.8779974
11  2  18.2681752
12  2  32.0130355
13  2 -19.4440498
14  2  -3.9030427
15  2  -1.8664987
16  2   8.9033056
17  2  -3.9795409
18  2 -37.1903759
19  2 -34.1665370
20  2  18.4815868


结果数据集应如下所示:

> head(df,20)
   id          ff pos neg
1   1  19.1934183   6   4
2   1  -7.9057744   6   4
3   1   5.0837978   6   4
4   1   8.8600765   6   4
5   1   5.6597565   6   4
6   1  -1.4857432   6   4
7   1  21.1613080   6   4
8   1  -1.3252265   6   4
9   1  28.2579320   6   4
10  1  -0.8779974   6   4
11  2  18.2681752   4   6
12  2  32.0130355   4   6
13  2 -19.4440498   4   6
14  2  -3.9030427   4   6
15  2  -1.8664987   4   6
16  2   8.9033056   4   6
17  2  -3.9795409   4   6
18  2 -37.1903759   4   6
19  2 -34.1665370   4   6
20  2  18.4815868   4   6


我认为类似的方法会起作用:

df<-df%>% group_by(id) %>%  mutate(pos= nrow(ff>0)) %>% ungroup()


任何帮助将是巨大的,谢谢。

最佳答案

您需要sum()

df %>% group_by(id) %>%
  mutate(pos = sum(ff>0),
         neg = sum(ff<0))

08-16 06:54