簡體   English   中英

基於來自另一個數據幀的多個列的R子集df

[英]R subset df based on multiple columns from another data frame

我試圖找到一種更簡潔的方法來過濾來自另一個數據幀中的行的數據幀(我目前正在使用循環)。

例如,假設您具有以下數據框df1,該數據框df1由一定數量的蘋果,梨,檸檬和橙子組成。 還有第五列,我們稱之為幸福。

require(gtools)
df1 <- data.frame(permutations(n = 4, r = 4, v = 1:4)) %>% cbind(sample(1:24))
colnames(df1) <- c("Apples", "Pears", "Lemons", "Oranges", "Happiness")

但是,您希望過濾此數據幀,以僅保留存在於第二個數據幀中的某些水果組合(不具有相同的列順序):

df2 = data.frame(Apples = c(1, 3, 2, 4), Pears = c(4, 1, 1, 3), Lemons = c(2, 2, 3, 1), Oranges = c(3, 4, 4, 2))

目前,我正在使用循環將df2的每一行作為過濾條件一對一地應用,然后綁定結果,例如:

df.ss = list()
for (i in 1:nrow(df2)){

df.ss[[i]] = filter(df1, 
                    df1$Apples == df2$Apples & 
                    df1$Pears == df2$Pears &
                    df1$Lemons == df2$Lemons & 
                    df1$Oranges == df2$Oranges)
}

df.ss %>% bind_rows()

有沒有更優雅的方式來解決這個問題?

我認為您正在尋找inner join

dplyr::inner_join(df1, df2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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