我有以下数据
df1 <- read.table(text = " ID Location Place
12 A M2
11 C M2
13 M M1
12 B M2
11 C M2
4 D M2
15 Z M1
13 M M1
15 Q M1
", header = TRUE)
如果位置不同,我想保留两个ID。如果ID和位置相同,则要删除其中一个。因此理想的结果将是:
ID Location Place
12 A M2
12 B M2
11 C M2
13 M M1
4 D M2
15 Z M1
15 Q M1
我尝试了以下代码,但不会产生内在的结果
library(dplyr)
df1 %>% distinct(ID, .keep_all = TRUE)
能否获得结果?感谢您的帮助
答案 0 :(得分:1)
我认为您是否关心变量Place
的哪个值。
在这种情况下,它成为经典的排名问题,您可以探索如何对Place
进行排名,但是要随机执行,请使用以下代码:
require(dplyr)
df1 %>%
group_by(ID, Location) %>%
mutate(rank = row_number()) %>%
ungroup %>%
filter(rank == 1) %>%
arrange(ID) %>%
select(-rank)
输出看起来像这样:
# A tibble: 7 x 3
ID Location Place
<int> <fct> <fct>
1 4 D M2
2 11 C M2
3 12 A M2
4 12 B M2
5 13 M M1
6 15 Z M1
7 15 Q M1
答案 1 :(得分:1)
您是否尝试在代码中添加位置?我认为它应该可以提供您想要的东西。
library(dplyr)
df1 %>% distinct(ID,Location, .keep_all = TRUE) %>% arrange(ID)