Home > Net >  r - How to subset a dataframe based on another dataframe
r - How to subset a dataframe based on another dataframe

Time:01-28

I have data dat like this:

s    A     chan
10   0.1   1
20   0.2   1
30   0.3   1
40   0.5   1
50   0.7   1
60   0.5   1
10   0.1   2
20   0.3   2
30   0.4   2
40   0.5   2
50   0.6   2
60   0.6   2
10   0.2   3
20   0.2   3
30   0.3   3
40   0.4   3
50   0.5   3
40   0.7   3
10   0.2   4
20   0.2   4
30   0.3   4
40   0.3   4
50   0.6   4
60   0.8   4

and I want to subset my data frame dat based on s (time) for each chan (channel) with a data frame df like this

s    chan
10    1
20    2
30    3
40    4

If I use dat %>% filter(s %in% df$s) I get each value for every channel like this:

s    A     chan
10   0.1   1
20   0.2   1
30   0.3   1
40   0.5   1
10   0.1   2
20   0.3   2
30   0.4   2
40   0.5   2
10   0.2   3
20   0.2   3
30   0.3   3
40   0.4   3
10   0.2   4
20   0.2   4
30   0.3   4
40   0.3   4

but what I actualy want it this:

s    A     chan
10   0.1   1
20   0.3   2
30   0.3   3
40   0.3   4

How can I achieve this result?

CodePudding user response:

I think this should do it

dat[which(dat[,3]==df[1:4,2] & dat[,1]==df[1:4,1]),]

1:4 being the range of lines in df.

CodePudding user response:

Since you didnt provide code to create the dataframes I just made up some new numbers

library(dplyr)

dat <- data.frame(s = rep(1:5,4),A = seq(0.05,1,0.05),
                    chan = rep(1:4,each=5))
  
  df <- data.frame(s = 1:4,chan=1:4)
  
# left join dat with df. This includes data (rows) from dat that has identical values of s and chan in both dataframes. 
  df %>% 
    left_join(dat)
  •  Tags:  
  • Related