我正在尝试制作一个数据框,其中的最大记录数是一个因子。我想要一个包含 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/