去除条件为 R 的重复项
Remove duplicates with conditions R
我有一个包含四列的虚拟数据框。
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
我想在两种不同的情况下删除名称(Bill 和 Tina)中的重复项:
第一种情况:按城市分组并删除名称中的重复项,只保留蓝眼。
结果 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中的重复项之间保留Blue eye,如果City是B,Name中的重复项之间保留Brown eye。
结果 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
感谢您的帮助!
这是使用 filter
和 dplyr
的一种可能性:
首先,我们筛选 Eye_color == Blue
,但前提是其中一行包含“Blue”。
df %>%
group_by(Name) %>%
filter(if (any(Eye_color == "Blue")) Eye_color == "Blue" else TRUE) %>%
ungroup()
第二种情况我们在filter
语句中使用if_else
:
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)))
您可以使用此代码:
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)))
我有一个包含四列的虚拟数据框。
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
我想在两种不同的情况下删除名称(Bill 和 Tina)中的重复项:
第一种情况:按城市分组并删除名称中的重复项,只保留蓝眼。 结果 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中的重复项之间保留Blue eye,如果City是B,Name中的重复项之间保留Brown eye。
结果 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
感谢您的帮助!
这是使用 filter
和 dplyr
的一种可能性:
首先,我们筛选 Eye_color == Blue
,但前提是其中一行包含“Blue”。
df %>%
group_by(Name) %>%
filter(if (any(Eye_color == "Blue")) Eye_color == "Blue" else TRUE) %>%
ungroup()
第二种情况我们在filter
语句中使用if_else
:
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)))
您可以使用此代码:
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)))