【问题标题】:Create a new column based on max of column with dplyr使用 dplyr 根据列的最大值创建一个新列
【发布时间】:2021-03-09 07:38:48
【问题描述】:

我有一个如下的 data.frame:

 GROUP OGS valMax
1 Group1 A   81.5
2 Group1 B   87.1
3 Group1 C   66.2
4 Group2 D   7.2
5 Group2 E   5.3
6 Group2 F   10.1

我正在尝试通过填充“valMax”的最大值来创建新列“groupMax”。预期的输出是:

  GROUP OGS valMax groupMax
1 Group1 A   81.5  87.1
2 Group1 B   87.1  87.1
3 Group1 C   66.2  87.1
4 Group2 D   7.2   10.1
5 Group2 E   5.3   10.1
6 Group2 F   10.1  10.1

我做了以下事情:

library(tidyverse)
library(magrittr)
df %>% group_by(GROUP) %>% mutate(groupMax = max(valMax))

我得到的错误是,

变异错误(groupMax = max(valMax)):找不到对象 'valMax'

数据屏蔽在这里不起作用吗?

提前致谢。

【问题讨论】:

  • groupby 应该是 group_by。除此之外,您的代码看起来是正确的。您确定列名为 valMax 吗? names(valMax) 返回什么?
  • 请在reproducible format(如dput)中分享您的数据,以便我们可以复制/粘贴它进行测试。您发布的内容似乎有些不对劲。您应该收到不同的错误消息。

标签: r dplyr


【解决方案1】:

正如罗纳克所说: 你可以group_by GROUP 然后改变一个新变量groupMax和max()function

library(dplyr)

# your data
df <- tribble(

  ~GROUP, ~OGS, ~valMax,
"Group1", "A", 81.5, 
"Group1", "B", 87.1, 
"Group1", "C", 66.2, 
"Group2", "D", 7.2, 
"Group2", "E", 5.3, 
"Group2", "F", 10.1)

df1 <- df %>% 
  group_by(GROUP) %>% 
  mutate(groupMax = max(valMax))

【讨论】:

  • 这不是 OP 已经在做的事情吗?您认为问题出在使用groupby 而不是group_by?不应该给出不同的错误信息吗?还是您假设 groupby 是在全局工作区中定义的另一个函数?
  • @MrFlick。是的,你是对的groupby 是问题所在。我看到了所需的输出并开始解决。在我发布我的答案后我认出了它。我应该删除答案吗?
  • 是的。我将它与熊猫混合并打了一个错字。另外,最后,我弄错了管道符号。它读取的不是 %>%,而是 %%。
猜你喜欢
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多