Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

count positive negative values in column by group

Tags:

dataframe

r

dplyr

I want to create two variables giving me the total number of positive and negative values by id, hopefully using dplyr.

Example data:

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

the resulting dataset should look like:

> 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

I have thought something similar to this will work:

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

Any help would be great, thanks.

like image 356
user63230 Avatar asked Nov 14 '16 18:11

user63230


People also ask

How to find number of positive and negative values for categorical column?

For example, if we have a data frame called df with one categorical column x and one numerical column y then the number of positive and negative values for categorical column can be found by using the below command − df%>%group_by (x)%>%mutate (positive=sum (y>0),negative=sum (y<0))

How to find GroupWise number of positive and negative values in R?

To find the groupwise number of positive and negative values in an R data frame, we can use mutate function of dplyr package. For example, if we have a data frame called df with one categorical column x and one numerical column y then the number of positive and negative values for categorical column can be found by using the below command −

How do you count negative numbers in a range in Excel?

Summary To count the number of cells that contain negative numbers in a range of cells, you can use the COUNTIF function. In the generic form of the formula (above) rng represents a range of cells that contain numbers. In the example, the active cell contains this formula:

How to count cells based on criteria in Excel?

COUNTIF counts the number of cells in a range that match the supplied criteria. In this case, the criteria is supplied as "<0", which is evaluated as "values less than zero". The total count of all cells in the range that meet this criteria is returned by the function. You can easily adjust this formula to count cells based on other criteria.


2 Answers

You need sum():

df %>% group_by(id) %>%  
  mutate(pos = sum(ff>0),
         neg = sum(ff<0))
like image 131
mtoto Avatar answered Oct 20 '22 00:10

mtoto


Here's an answer that add the ifelse part of your question:

df <- df %>% group_by(id) %>%  
  mutate(pos = sum(ff>0), neg = sum(ff<0)) %>%
  group_by(id) %>%
  mutate(any_neg=ifelse(any(ff < 0), 1, 0))

Output:

> head(df, 20)
Source: local data frame [20 x 5]
Groups: id [2]

      id          ff   pos   neg any_neg
   <int>       <dbl> <int> <int>   <dbl>
1      1  19.1934183     6     4       1
2      1  -7.9057744     6     4       1
3      1   5.0837978     6     4       1
4      1   8.8600765     6     4       1
5      1   5.6597565     6     4       1
6      1  -1.4857432     6     4       1
7      1  21.1613080     6     4       1
8      1  -1.3252265     6     4       1
9      1  28.2579320     6     4       1
10     1  -0.8779974     6     4       1
11     2  18.2681752     4     6       1
12     2  32.0130355     4     6       1
13     2 -19.4440498     4     6       1
14     2  -3.9030427     4     6       1
15     2  -1.8664987     4     6       1
16     2   8.9033056     4     6       1
17     2  -3.9795409     4     6       1
18     2 -37.1903759     4     6       1
19     2 -34.1665370     4     6       1
20     2  18.4815868     4     6       1
like image 42
Megatron Avatar answered Oct 20 '22 00:10

Megatron