How to find the number of times a variable changes its sign in an R data frame column?


To find the number of times a variable changes its sign in an R data frame column, we can use sign function with diff and sum function.

For example, if we have a data frame called df that contains a column say C then, we can find the number of times C changes its sign by using the following command −

sum(diff(sign(df$C))!=0)

Example 1

Following snippet creates a sample data frame −

x<-rnorm(20)
df1<-data.frame(x)
df1

The following dataframe is created −

     x
1   0.37963948
2  -0.50232345
3  -0.33320738
4  -1.01857538
5  -1.07179123
6   0.30352864
7   0.44820978
8   0.05300423
9   0.92226747
10  2.05008469
11 -0.49103117
12 -2.30916888
13  1.00573852
14 -0.70920076
15 -0.68800862
16  1.02557137
17 -0.28477301
18 -1.22071771
19  0.18130348
20 -0.13889136

To find the number of times x changes its sign, add the following code to the above snippet −

x<-rnorm(20)
df1<-data.frame(x)
sum(diff(sign(df1$x))!=0)

Output

If you execute all the above given snippets as a single program, it generates the following output −

[1] 9

Example 2

Following snippet creates a sample data frame −

y<-sample(-2:2,20,replace=TRUE)
df2<-data.frame(y)
df2

The following dataframe is created −

    y
1  -1
2   0
3  -1
4   2
5   2
6   0
7   1
8   1
9   1
10  2
11  0
12 -2
13 -1
14 -2
15 -1
16  2
17  0
18  1
19  1
20 -2

To find the number of times y changes its sign, add the following code to the above snippet −

y<-sample(-2:2,20,replace=TRUE)
df2<-data.frame(y)
sum(diff(sign(df2$y))!=0)

Output

If you execute all the above given snippets as a single program, it generates the following output −

[1] 11

Example 3

Following snippet creates a sample data frame −

z<-sample(-5:5,20,replace=TRUE)
df3<-data.frame(z)
df3

The following dataframe is created −

    z
1   5
2   0
3   3
4   2
5   4
6  -2
7  -1
8   1
9  -5
10  2
11  2
12  4
13  3
14  2
15 -4
16 -1
17  3
18  1
19  1
20  4

To find the number of times z changes its sign, add the following code to the above snippet −

z<-sample(-5:5,20,replace=TRUE)
df3<-data.frame(z)
sum(diff(sign(df3$z))!=0)

Output

If you execute all the above given snippets as a single program, it generates the following output −

[1] 8

Updated on: 23-Nov-2021

353 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements