2017-06-15 69 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

我不确定你的意思是“组内所有行的组合”。 –