簡體   English   中英

r - 如何基於另一個 dataframe 對 dataframe 進行子集化

[英]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:4df中的行范圍。

由於您沒有提供創建數據框的代碼,因此我只是編了一些新數字

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM