2016-12-27 34 views
-6

加列我有数据表R-如何在r中

Name Score 
A  5 
A  6 
B  9 
B  1 
B  0 
... 

我想计算和列“FScore” =最高分在这个表格

我预期的结果

Name Score Fscore 
A  5  6 
A  6  6 
B  9  9 
B  1  9 
B  0  9 

谢谢。

+2

'AVE(DF $分数,df $名称,FUN = max)' –

回答

2

如果您试图找到每个Name值的最高分数,则可以使用data.table,如下所示。

# example data 
d <- data.table(Name = c("A", "A", "B", "B", "B"), 
       Score = c(5, 6, 9, 1, 0)) 
# find max for each Name and save the value in a new column, Fscore 
d[ , Fscore := max(Score), by=Name] 

结果:

> print(d) 
    Name Score Fscore 
1: A  5  6 
2: A  6  6 
3: B  9  9 
4: B  1  9 
5: B  0  9 
0

使用dplyr另一种选择可能是:

df = data.frame(Name = c('a', 'a', 'b','b','b'), Score = c(5,6,9,1,0)) 

df %>% group_by(Name) %>% mutate(Fscore = max(Score)) 

Source: local data frame [5 x 3] 
Groups: Name [2] 

    Name Score FScore 
    <fctr> <dbl> <dbl> 
1  a  5  6 
2  a  6  6 
3  b  9  9 
4  b  1  9 
5  b  0  9 
2

我们可以使用基本R选项ave

df$Fscore <- ave(df$Score, df$Name, FUN = max) 
df 
# Name Score Fscore 
#1 A  5  6 
#2 A  6  6 
#3 B  9  9 
#4 B  1  9 
#5 B  0  9