R中

2017-04-26 56 views
0

马克斯 - 如果Excel复制我试图复制的最大功能,如果从Excel中R.R中

ksu  price max 
9144037 3.11 3.11 
8448749 4.19 5.24 
9649391 0  8.39 
8448749 4.19 5.24 
8448749 4.19 5.24 
8448749 4.19 5.24 
8448749 4.19 5.24 
9649391 8.39 8.39 
8448749 5.24 5.24 
9144037 1.99 3.11 
9144037 1.99 3.11 

如果我用Excel做我会用MAX(IF())。此代码应该查看每个ksu的最大价格,并返回最后一列的最大值。我试过这个:

max(price[ksu == ksu]) 

但它没有给我所需的输出。无论ksu如何,它只返回一个最大值。

+0

以供将来参考,请在提交之前任何更多的问题,请阅读以下stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Dason

回答

2

假设你有一个叫df data.frame你可以很容易地使用ave函数来得到你想要的想。举个例子:

> df <- data.frame(grp = c('a','a','b','b'), vals = 1:4) 
> df 
    grp vals 
1 a 1 
2 a 2 
3 b 3 
4 b 4 
> # Returns a vector 
> ave(df$vals, df$grp, FUN = max) 
[1] 2 2 4 4 
> # So we can store it back into the data.frame if we want 
> df$max <- ave(df$vals, df$grp, FUN = max) 
> df 
    grp vals max 
1 a 1 2 
2 a 2 2 
3 b 3 4 
4 b 4 4 

因此,使用您的变量名(但仍假设data.frame是df):HTTP://

df$max <- ave(df$price, df$ksu, FUN = max) 
+0

这工作。谢谢! – user1834217

+0

另一个选择是'setDT(df)[,Max:= max(vals),grp]' – akrun

+0

@akrun对。我正在寻找一个基础解决方案,但如果您愿意,您可以提交data.table解决方案。 – Dason

1

假设你的数据在一个名为data.framedat,我们可以使用dplyr包:

library(dplyr) 
dat %>% 
    group_by(ksu) %>% 
    mutate(max = max(price)) 

     ksu price max 
    <int> <dbl> <dbl> 
1 9144037 3.11 3.11 
2 8448749 4.19 5.24 
3 9649391 0.00 8.39 
...