2017-06-15 39 views
0

我有一個由不同組構成的數據框,以及每個組的實際值和預測值。我想這些值提取的測試值:從數據框中提取組相關結果

library(dplyr) 
d = data.frame(group = c(rep(5,x="a"),rep(5,x="b")), real = c(rep(2, x=1:5)), pred = c(2,1,3,4,5,1,2,4,3,5)) 

group real pred 
1  a 1 2 
2  a 2 1 
3  a 3 3 
4  a 4 4 
5  a 5 5 
6  b 1 1 
7  b 2 2 
8  b 3 4 
9  b 4 3 
10  b 5 5 

d <- d %>% group_by(group) %>% mutate(sg = ifelse(real == 1 & real == pred, 1, 0)) 
d <- d %>% group_by(group) %>% mutate(sp = ifelse(real <= 3 & pred <= 3, 1, 0)) 
d %>% distinct(sg, sp) 

sg sp group 
1  0  1  a 
2  0  0  a 
3  1  1  b 
4  0  1  b 
5  0  0  b 

但我想是這樣的(每組僅1個結果)

sg sp group 
1  0  1  a 
3  1  1  b 

我敢肯定dplyr,data.table或tidyr能做點什麼,但我找不到方法。

回答

0

如果它始終是要提取每個組的第一行,你可以使用do功能:

d %>% do(.[1,])

另一種選擇是使用的過濾器的功能是這樣的: d %>% filter(seq_along(sp) == 1)

+0

非常感謝Erich,但是我想要的更多的是組內所有行的組合。我發現的唯一解決方案是做mutate(sg = sg || sg) –

+0

我不確定你的意思是「組內所有行的組合」。 –