我有两个向量,或data.frame的两列,我想第一列代表值,比如说A,第二组为G,我想根据A的最大值乘G来更改组,那么我想更改G的值,以使该组按最大A排序。例如
df <-"A G
1.0 1
2.0 1
2.6 2
1.0 2
2.0 2
1.0 3
2.3 3"
df <- read.table(textConnection(df), header=TRUE)
aggregate(df$A, by=list(df$G), max)
则各组的最大值为2 2.6 2.3,第3组必须变为2,第2组-> 3,而第1组保持不变。
结果应为
A G
1.0 1
2.0 1
2.6 3
1.0 3
2.0 3
1.0 2
2.3 2
使用agreggate或dplyr来获取最大值很容易
require(dplyr)
df %>% group_by(G) %>% summarise(Amax=max(A))
但我不知道如何更改组。
答案 0 :(得分:2)
您可以按组在最大值上使用dense_rank()
。虽然尚不清楚如果绑定最大值,结果应该是什么。
library(dplyr)
df %>%
mutate(G = dense_rank(ave(A, G, FUN = max)))
A G
1 1.0 1
2 2.0 1
3 2.6 3
4 1.0 3
5 2.0 3
6 1.0 2
7 2.3 2
答案 1 :(得分:1)
使用data.table
和match
:
df=as.data.table(df)
df[,maxg:=max(A),by=G][,G:=match(maxg,sort(unique(maxg)))][,maxg=NULL]
答案 2 :(得分:0)
我们可以将eventArgs.preventDefault
与其分组(有序)的重命名版本一起加入,并获得新的分组:
df
里面有什么
library(data.table)
setDT(df)
df[df[, max(A), by = G][order(-V1)][, newG := .I], on = "G"]
A G V1 newG
1: 2.6 2 2.6 1
2: 1.0 2 2.6 1
3: 2.0 2 2.6 1
4: 1.0 3 2.3 2
5: 2.3 3 2.3 2
6: 1.0 1 2.0 3
7: 2.0 1 2.0 3
为您提供了每组G中A的最大值的数据表。
df[, max(A), by = G]
按降序对[order(-V1)]
(存储为V1)的值进行排序。
max(A)
赋予变量[, newG := .I]
行号。
newG
是data.table中表联接的语法(在变量Z上联接表X和Y)
如果要删除X[Y, on = "Z"]
,则可以通过将其附加到链式命令V1
的末尾来实现。