r中数据帧不同行的每一列的最大值

易卜拉欣B.

假设有一个带ID列的有序df,其他包含数字数据的列按最后一列排序。

ID <- c(123, 142, 21, 562, 36, 721, 847, 321)
A <- c(96, 83, 73, 47, 88, 65, 72, 67)
B <- c(72, 69, 88, 75, 63, 89, 48, 80)
C <- c(95, 94, 94, 94, 65, 81, 75, 75)
D <- c(63, 88, 89, 88, 89, 79, 88, 79)
Rating <- c(97, 95, 92, 87, 85, 83, 79, 77)
df <- data.frame(ID, A, B, C, D, Rating)
df
#   ID  A  B  C  D Rating
#1 123 96 72 95 63     97
#2 142 83 69 94 88     95
#3  21 73 88 94 89     92
#4 562 47 75 94 88     87
#5  36 88 63 65 89     85
#6 721 65 89 81 79     83
#7 847 72 48 75 88     79
#8 321 67 80 75 79     77

目的是获取每个组/列的最大值及其ID,并且每对/每个对都必须来自不同的行(唯一ID)。对于同一列具有相同值的两个ID,请选择评分较高的ID。

我所做的是使用apply()函数从每一列中获取最大值,提取具有该值的ID,然后将它们全部连接到数据框中。因为我仍然缺少第4列的ID,所以我使用了反联接来取出之前的ID,并重复此过程以获取此数据帧:

my_max <- data.frame(apply(df, 2, max))
A2 <- df[which(df$A == my_max[2,1]),]%>% dplyr::select(ID, A)
B2 <- df[which(df$B == my_max[3,1]),]%>% dplyr::select(ID, B)
C2 <- df[which(df$C == my_max[4,1]),]%>% dplyr::select(ID, C)
D2 <- df[which(df$D == my_max[5,1]),]%>% dplyr::select(ID, D)
all <- full_join(A2, B2, by='ID') %>% full_join(C2, by='ID') %>% full_join(D2, by='ID')
all <- all[-c(4),]
df <- anti_join(df, all, by='ID')
my_max <- data.frame(apply(df, 2, max))
C2 <- df[which(df$C == my_max[4,1]),]%>% dplyr::select(ID, C)
all <- all %>% full_join(C2, by='ID')
all <- all[-c(5),-c(4)]

最后给我:

all
#   ID  A  B  D C.y
#1 123 96 NA NA  NA
#2 721 NA 89 NA  NA
#3  21 NA NA 89  NA
#4 142 NA NA NA  94

有没有更简洁或简洁/有效的方法?不一定是相同的方式,也许只是ID和角色类似:

#   ID  Group
#1 123    A
#2 721    B
#3 142    C
#4 21     D
里克

我看到某些解决方案不处理重复的ID。例如,对于组A和C,我们都有ID 123。

为了获得与您的问题的最终结果相似的输出,以下是处理重复ID的另一种解决方案:

# initialization
variables <- c("A", "B", "C", "D")
df_max <- data.frame(ID = numeric(length(variables)), Group = variables)

for(column in variables){
  temp_id <- df %>% 
    filter(!(ID %in% df_max$ID)) %>% 
    arrange(desc(!!rlang::sym(column)), desc(Rating)) %>% 
    slice(1) %>% 
    select(ID) %>%
    as.numeric(ID)
  df_max[df_max$Group == column, "ID"] <- temp_id
}

基本上,该filter步骤确保我们不考虑已经选择的ID。

输出量

# > df_max
#
#    ID Group
# 1 123     A
# 2 721     B
# 3 142     C
# 4  21     D

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找一列的最大值(按组),然后将值插入R中的另一数据帧

来自分类Dev

从Java的每一列中获取最大值?

来自分类Dev

如何有效地在Pyspark的数据帧的每一列上为每个最小值或最大值获取一行?

来自分类Dev

在数据帧的每一列中查找最接近零的值-R

来自分类Dev

R使用dplyr根据一列中的最大值对数据框进行变异

来自分类Dev

Python:将单元格中的值除以每一列中的最大值

来自分类Dev

Python:将单元格中的值除以每一列中的最大值

来自分类Dev

从csv文件的每一列获取最大值

来自分类Dev

在Scala中的Spark数据帧的每一行中查找最大值

来自分类Dev

在R中的时间序列数据中的每一行中创建最后两行具有最大值的不同列

来自分类Dev

如何在Access 2016的另一列上选择具有最大值的不同行

来自分类Dev

如何对Google Spreadsheets中每一列的最大值求和?

来自分类Dev

难以找到二维数组中每一列的最大值

来自分类Dev

如何对Google Spreadsheets中每一列的最大值求和?

来自分类Dev

从列表中的数据框创建数据框,并在R的一列中创建最大值

来自分类Dev

提取R数据框中另一列中具有最大值的唯一行

来自分类Dev

使用一组数据框中的每一列的每个单元格创建最大值的新数据框

来自分类Dev

有效地找到R中数据帧中不同行的列值计数

来自分类Dev

根据另一列中不同行中的值创建数据框或小标题

来自分类Dev

将字符串替换为根据数据帧中另一列的最大值计算出的值

来自分类Dev

mysql-根据不同表中另一列的最大值选择唯一列

来自分类Dev

在pyspark数据框中添加具有另一列最大值的新列

来自分类Dev

如何从R中的两个不同数据帧中添加两列,其中一列只是另一列的唯一值的子集

来自分类Dev

R数据帧中的最大值长度,RODBC

来自分类Dev

R数据帧中的最大值长度,RODBC

来自分类Dev

计算R中每一行中特定列的后3行最大值

来自分类Dev

从数据帧列表中依次提取每一列

来自分类Dev

R中数据帧列表中每一列的组合

来自分类Dev

选择R中每列的最大值

Related 相关文章

  1. 1

    查找一列的最大值(按组),然后将值插入R中的另一数据帧

  2. 2

    从Java的每一列中获取最大值?

  3. 3

    如何有效地在Pyspark的数据帧的每一列上为每个最小值或最大值获取一行?

  4. 4

    在数据帧的每一列中查找最接近零的值-R

  5. 5

    R使用dplyr根据一列中的最大值对数据框进行变异

  6. 6

    Python:将单元格中的值除以每一列中的最大值

  7. 7

    Python:将单元格中的值除以每一列中的最大值

  8. 8

    从csv文件的每一列获取最大值

  9. 9

    在Scala中的Spark数据帧的每一行中查找最大值

  10. 10

    在R中的时间序列数据中的每一行中创建最后两行具有最大值的不同列

  11. 11

    如何在Access 2016的另一列上选择具有最大值的不同行

  12. 12

    如何对Google Spreadsheets中每一列的最大值求和?

  13. 13

    难以找到二维数组中每一列的最大值

  14. 14

    如何对Google Spreadsheets中每一列的最大值求和?

  15. 15

    从列表中的数据框创建数据框,并在R的一列中创建最大值

  16. 16

    提取R数据框中另一列中具有最大值的唯一行

  17. 17

    使用一组数据框中的每一列的每个单元格创建最大值的新数据框

  18. 18

    有效地找到R中数据帧中不同行的列值计数

  19. 19

    根据另一列中不同行中的值创建数据框或小标题

  20. 20

    将字符串替换为根据数据帧中另一列的最大值计算出的值

  21. 21

    mysql-根据不同表中另一列的最大值选择唯一列

  22. 22

    在pyspark数据框中添加具有另一列最大值的新列

  23. 23

    如何从R中的两个不同数据帧中添加两列,其中一列只是另一列的唯一值的子集

  24. 24

    R数据帧中的最大值长度,RODBC

  25. 25

    R数据帧中的最大值长度,RODBC

  26. 26

    计算R中每一行中特定列的后3行最大值

  27. 27

    从数据帧列表中依次提取每一列

  28. 28

    R中数据帧列表中每一列的组合

  29. 29

    选择R中每列的最大值

热门标签

归档