按分组列连接和索引最高值

问题描述 投票:0回答:1

我有以下数据集:

A1 A2 A3 A4 A5 A6 A7
-1.2650612 -0.6868529 -0.4456620 1.2240818 0.3598138 0.4007715 0.1106827
colnames<-c(paste0(1:7,"A"))
set.seed(123)
values<-c(rnorm(7))

我希望能够创建一个代码,该代码将找到前 3 列(A1、A2、A3)内找到的最高值(按行)并写入相应的列名称,对接下来的 2 列重复相同的操作,其余 2 列(A6,A7)相同,如果所有值都相同(也许会发生这种情况,只需写下组中第一列的名称)

我想要的输出是:

A1,A2,A3 A4,A5 A6,7
A3 A4 A5

接下来我可以尝试什么?

r tidyverse data-wrangling
1个回答
1
投票

这是一种选择

library(dplyr)
library(tibble)
library(tidyr)
pivot_longer(df1, everything()) %>%
  group_by(group = rep(1:3, c(3, 2, 2))) %>% 
  summarise(name1 = name[which.max(value)],
   name2 = toString(name)) %>% 
 select(name2, name1) %>% 
 deframe %>% 
 as_tibble_row

-输出

# A tibble: 1 × 3
  `A1, A2, A3` `A4, A5` `A6, A7`
  <chr>        <chr>    <chr>   
1 A3           A4       A6      

数据

df1 <- structure(list(A1 = -1.2650612, A2 = -0.6868529, A3 = -0.445662, 
    A4 = 1.2240818, A5 = 0.3598138, A6 = 0.4007715, A7 = 0.1106827), 
class = "data.frame", row.names = c(NA, 
-1L))
© www.soinside.com 2019 - 2024. All rights reserved.