R 函数 which.max with tapply

标签 r dataframe tapply

我正在尝试制作一个数据框,其中的最大记录数是一个因子。我想要一个包含 4 行(每个 G 行)的数据框,其中该组中 X 的最大值和相应的 Y 值。我知道我可以写一个循环,但宁愿不写。

Data<-data.frame(X=rnorm(200), Y=rnorm(200), G=rep(c(1,2,3,4), each=50))
XMax<-tapply(Data$X, Data$G, function(x){max(x, na.rm=T)})
WhichXMax<-tapply(Data$X, Data$G, function(x){which.max(x)})

which.max 函数在数据被 tapply 因子子集化后返回行号,我真的想要引用数据行的行号。所以我可以做类似的事情;
YMax<-Data$Y[Which]
MaxData<-data.frame(XMax=XMax, YMax=YMax, G=levels(Data$G))

最佳答案

library(dplyr)
Data %>% 
    group_by(G) %>% 
    filter(X==max(X))

如果你不想包括关系,那么
Data %>%
    group_by(G) %>%
    arrange(desc(X)) %>%
    slice(1)

关于R 函数 which.max with tapply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294088/

相关文章:

python - 计算 Pandas 数据框设置的范围内的日期

python - 根据时间范围重新采样数据帧,忽略日期

python - 如何使用 Pandas 计算 GroupBy 对象的滚动平均值?

java - 如何在Hadoop集群中加载native-hadoop库?

javascript - R Shiny-为电缆表添加额外的标题行 'sticky'

r - 如何在 R 中对相似的行进行分组

r - by() 函数是否生成增长列表

R : Percentile 90% with tapply

r - 当数据是tapply的函数时如何在R中使用ggplot2

替换字符串中的下标数字