我正在尋找優雅的代碼,它以不同的方式將滿足兩個條件的行過濾到新的 df:
filter (birth_year==1987 & graduation_year==2005)
(birth_year==1990 & graduation_year==2008)
(birth_year==1993 & graduation_year==2011)
(birth_year==1998 & graduation_year==2016)
#this is not a code
這是我的 df:
birth_year <- c(1987,1987,1987,1990,1990,1990,1993,1993,1998,1998)
graduation_year <- c(2005,2005,2006,2008,2007,2008,2011,2012,2017,2016)
grade<-c(56,101,85,120,75,96,85,68,91,105)
df <- data.frame(birth_year, graduation_year, grade)
> df
birth_year graduation_year grade
1 1987 2005 56
2 1987 2005 101
3 1987 2006 85
4 1990 2008 120
5 1990 2007 75
6 1990 2008 96
7 1993 2011 85
8 1993 2012 68
9 1998 2017 91
10 1998 2016 105
結果/新的 df 應該是:
birth_year graduation_year grade
1 1987 2005 56
2 1987 2005 101
3 1990 2008 120
4 1990 2008 96
5 1993 2011 85
6 1998 2016 105
uj5u.com熱心網友回復:
在這種特定情況下,我認為您可以這樣做:
filter(graduation_year - birth_year == 18)
另一個想法是使用您的條件創建一個參考資料框,如下所示:
birth_year <- c(1987, 1990, 1993, 1998)
graduation_year <- c(2005, 2008, 2011, 2016)
conditions <- data.frame(birth_year, graduation_year)
然后申請inner_join:
df %>% inner_join(conditions)
Joining, by = c("birth_year", "graduation_year")
birth_year graduation_year grade
1 1987 2005 56
2 1987 2005 101
3 1990 2008 120
4 1990 2008 96
5 1993 2011 85
6 1998 2016 105
uj5u.com熱心網友回復:
您可以使用%in%運算子
library(dplyr)
new_df <- df %<%
filter(birth_year %in% c(1987, 1990, 1993, 1998),
graduation_year %in% c(2005, 2008, 2011, 2016)
)
uj5u.com熱心網友回復:
您可以簡單地將您的條件與 分開,|以便保留滿足其中任何一個條件的所有記錄。
library(dplyr)
new_df <- df %>% filter(birth_year==1987 & graduation_year==2005 |
birth_year==1990 & graduation_year==2008 |
birth_year==1993 & graduation_year==2011 |
birth_year==1998 & graduation_year==2016)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320768.html
