R中

2017-04-26 59 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 
...