样本数据
data =data.frame(id=c(1,1,2,2,3,3,4,4,5,5),
score=c(10,6,1,7,6,0,8,5,5,1),
WANT=c(6,6,1,1,0,0,5,5,1,1))
目标是使新列WANT等于每个ID复制的得分的最小值。这是我对dplyr的尝试,但这只会使数据变小,并为id提供一行。
library(dplyr)
data %>%
group_by(id) %>%
slice(which.min(score))
答案 0 :(得分:1)
对我来说没有错误
data =data.frame(id=c(1,1,2,2,3,3,4,4,5,5),
score=c(10,6,1,7,6,0,8,5,5,1),
WANT=c(6,6,1,1,0,0,5,5,1,1))
library(dplyr)
data %>%
group_by(id) %>%
mutate(want2 = min(score))
id score WANT want2
<dbl> <dbl> <dbl> <dbl>
1 1 10 6 6
2 1 6 6 6
3 2 1 1 1
4 2 7 1 1
5 3 6 0 0
6 3 0 0 0
7 4 8 5 5
8 4 5 5 5
9 5 5 1 1
10 5 1 1 1
您可以通过以下方式进行总结:
data %>%
group_by(id) %>%
summarise(want2 = min(score))
id want2
<dbl> <dbl>
1 1 6
2 2 1
3 3 0
4 4 5
5 5 1