【问题标题】:Selecting Max Column Values in R在 R 中选择最大列值
【发布时间】:2012-08-17 06:28:27
【问题描述】:

我对 R 很陌生,并且对选择列中的最大值有疑问。

我有以下数据框:

          X      Y
 [1,]     1     10
 [2,]     1     12
 [3,]     1     NA
 [4,]     2     5
 [5,]     2     6
 [6,]     2     7
 [7,]     2     8
 [8,]     3     NA
 [9,]     3     NA
[10,]     3     1

我想选择 Y 列的最大值并用该值替换每个组中的所有 Y 值。我的输出数据框如下所示:

          X      Y
 [1,]     1     12
 [2,]     1     12
 [3,]     1     12
 [4,]     2     8
 [5,]     2     8
 [6,]     2     8
 [7,]     2     8
 [8,]     3     1
 [9,]     3     1
[10,]     3     1

任何帮助将不胜感激。谢谢!

这是数据

Data <- structure(list(X = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), 
                     Y = c(10L, 12L, NA, 5L, 6L, 7L, 8L, NA, NA, 1L)), 
                .Names = c("X", "Y"), class = "data.frame",
                row.names = c("[1,]", "[2,]", "[3,]", "[4,]", "[5,]", "[6,]", "[7,]", "[8,]", "[9,]", "[10,]"))

【问题讨论】:

  • 欢迎来到 StackOverflow。如果您创建了一个 reproducible example 来证明您的问题/问题,我们会发现它更容易回答。

标签: r


【解决方案1】:

您可以将ave 与包装max 的自定义函数一起使用,因此您可以删除NA 值:

Data$Y <- ave(Data$Y, Data$X, FUN=function(x) max(x, na.rm=TRUE))

【讨论】:

  • 谢谢,这正是我想要做的。
【解决方案2】:

使用dplyrdata.table 包,您可以轻松地通过组来计算分组操作。

dplyr 解决方案

require(dplyr)
Data %>% group_by(X) %>% mutate(Y = max(Y, na.rm=TRUE))

data.table 解决方案

require(data.table)
setDT(Data)[, Y:=max(Y, na.rm=TRUE), by=X][]

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多