R中的最大If excel复制

R中的最大If excel复制,r,R,我正在尝试从R中的Excel复制max if函数 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

我正在尝试从R中的Excel复制max if函数

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如何,它只返回一个最大值。

假设您的数据位于名为
dat
数据框中,我们可以使用
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
...
库(dplyr)
dat%>%
分组依据(ksu)%>%
变异(最大值=最大值(价格))
ksu最大价格
1  9144037  3.11  3.11
2  8448749  4.19  5.24
3  9649391  0.00  8.39
...

假设您的数据位于名为
dat
数据框中,我们可以使用
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
...
库(dplyr)
dat%>%
分组依据(ksu)%>%
变异(最大值=最大值(价格))
ksu最大价格
1  9144037  3.11  3.11
2  8448749  4.19  5.24
3  9649391  0.00  8.39
...

假设您有一个名为
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

假设您有一个名为
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

另一个选项是
setDT(df)[,Max:=Max(vals),grp]
@akrun Right。我想要一个基本的解决方案,但是如果你想的话,你可以提交一个data.table解决方案。你可以添加它,因为它非常简单。这很简单,但它是一种不同的方法。有多个答案没有坏处。老实说,这个问题可能被当作一个复制品来解决,但我太懒了,找不到复制品。另一个选项是
setDT(df)[,Max:=Max(vals),grp]
@akrun Right。我想要一个基本的解决方案,但是如果你想的话,你可以提交一个data.table解决方案。你可以添加它,因为它非常简单。这很简单,但它是一种不同的方法。有多个答案没有坏处。老实说,这个问题可能会被当作一个复制品来解决,但我太懒了,找不到复制品。为了将来的参考,请在提交更多问题之前阅读以下内容:为了将来的参考,请在提交更多问题之前阅读以下内容: