我有一個四列的虛擬資料框。
df <- data.frame(City = c("A","A","A","B","B","B","B"),
Name=c("Jon", "Bill","Bill", "Maria", "Ben", "Tina",'Tina'),
Age = c(23, 41, 32, 58, 26, 12, 15),
Eye_color=c("Blue","Blue", "Brown", "Brown", "Blue", "Blue","Brown"))
City Name Age Eye_color
1 A Jon 23 Blue
2 A Bill 41 Blue
3 A Bill 32 Brown
4 B Maria 58 Brown
5 B Ben 26 Blue
6 B Tina 12 Blue
7 B Tina 15 Brown
我想用兩種不同的情況洗掉名稱(比爾和蒂娜)中的重復項:
第一種情況:按城市分組并洗掉名稱中的重復項,只保留藍眼。結果 1 應如下所示:
City Name Age Eye_color
1 A Jon 23 Blue
2 A Bill 41 Blue
3 B Maria 58 Brown
4 B Ben 26 Blue
5 B Tina 12 Blue
第二種情況:我想指定如果城市是 A,在 Names 中的重復項之間保持藍眼,如果 City 是 B 在 Name 中的重復項之間保持棕眼。
結果 2 應如下所示:
City Name Age Eye_color
1 A Jon 23 Blue
2 A Bill 41 Blue
3 B Maria 58 Brown
4 B Ben 26 Blue
5 B Tina 15 Brown
謝謝您的幫助!
uj5u.com熱心網友回復:
filter這是使用and的一種可能性dplyr:
首先,我們過濾Eye_color == Blue但僅當一行包含“藍色”時。
df %>%
group_by(Name) %>%
filter(if (any(Eye_color == "Blue")) Eye_color == "Blue" else TRUE) %>%
ungroup()
在第二種情況下,我們if_else在filter陳述句中使用:
df %>%
filter(if_else(Name == "Bill", Eye_color == "Blue", if_else(Name == "Tina", Eye_color == "Brown", TRUE)))
更新
對于新資料集,您可以使用與第 1 部分相同的代碼。對于第 2 部分,只需替換其中的邏輯陳述句if_else:
df %>%
filter(if_else(City == "A", Eye_color == "Blue", if_else(City == "B", Eye_color == "Brown", TRUE)))
uj5u.com熱心網友回復:
您可以使用以下代碼:
df1 <- df %>%group_by(Name) %>% filter(Eye_color == "Blue")
df2 <- df %>% filter(if_else(Name == "Bill", Eye_color == "Blue", if_else(Name == "Tina", Eye_color == "Brown", TRUE)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437108.html
