JerseyGood
JerseyGood

Reputation: 191

How to select rows based on their column value in R

the dataset is something like this:

daily.sample
       day1 day2 day3 day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14
132304  919  420 1021  331 1012  606  256   58  302    87   859  1140   603  1472
121945  419 1048  541  336 1086  796   95  578 1419   985   752   570   865   242
130055 3036 1473 3043 3291 4869 2902 5306 4480 4820   254  2652  2529  3346   995

I want to select rows that satisfy the following conditions: it's day1 value is close to it's day8 value it's day2 value is close to it's day9 value it's day3 value is close to it's day10 value ...

by close i mean the difference is within a range, or something like "0.9< day1/day8 <1.1"

Upvotes: 0

Views: 2358

Answers (1)

Beasterfield
Beasterfield

Reputation: 7113

You can simply substract the right part of your data.frame from the left part by:

distance <- abs(daily.sample[ , 1:7, drop = FALSE ] - daily.sample[ , 8:14, drop  =FALSE ])

The ratio is build accordingly:

ratio <- daily.sample[ , 1:7, drop = FALSE ] / daily.sample[ , 8:14, drop  =FALSE ]

And then you can simply subset your data depending on the day for which you want to check.

daily.sample[ distance[ ,"day1" ] < 1000, ]

       day1 day2 day3 day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14
132304  919  420 1021  331 1012  606  256   58  302    87   859  1140   603  1472
121945  419 1048  541  336 1086  796   95  578 1419   985   752   570   865   242

Or for the ratio within a range:

daily.sample[ ratio[ , "day1"] > 0.7 & ratio[ , "day1"] < (10/7),  ]


       day1 day2 day3 day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14
121945  419 1048  541  336 1086  796   95  578 1419   985   752   570   865   242

If for the latter case the range is always (min.ratio, 1/min.ratio) you could calculate the ratio as ratio[ ratio < 1 ] <- 1 / ratio[ ratio < 1 ] and than just subset by:

daily.sample[ ratio[ , "day1"] < (10/7),  ].

Upvotes: 1

Related Questions