[英]r - How to subset a dataframe based on another dataframe
我有dat
的數據:
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
我想基於 s (時間)為每個 chan (通道)使用像這樣的數據幀df
子集我的數據幀dat
s chan
10 1
20 2
30 3
40 4
如果我使用dat %>% filter(s %in% df$s)
我會得到每個通道的每個值,如下所示:
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
但我實際上想要的是:
s A chan
10 0.1 1
20 0.3 2
30 0.3 3
40 0.3 4
我怎樣才能達到這個結果?
我認為這應該這樣做
dat[which(dat[,3]==df[1:4,2] & dat[,1]==df[1:4,1]),]
1:4
是df
中的行范圍。
由於您沒有提供創建數據框的代碼,因此我只是編了一些新數字
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)
您正在尋找的是semi_join
; 它根據右側數據框中是否存在匹配項過濾左側數據框中的行,
semi_join(dat, df, by = c("s", "chan"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.