我对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,]"))
答案 0 :(得分:8)
您可以将ave
与包含max
的自定义函数结合使用,这样您就可以删除NA
个值:
Data$Y <- ave(Data$Y, Data$X, FUN=function(x) max(x, na.rm=TRUE))
答案 1 :(得分:0)
使用dplyr
或data.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][]