根据另一个向量R重新分类向量

时间:2019-09-18 23:51:15

标签: r sorting dataframe vector

我有两个向量,或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))

但我不知道如何更改组。

3 个答案:

答案 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.tablematch

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的末尾来实现。