查找某些变量的最小类别值-R

查找某些变量的最小类别值-R,r,dataframe,R,Dataframe,让我拥有以下数据框架df: x=c("a1","a2","a3","b1","b2","b3") y1=c(4,2,1,1,5,8) y2=c(7,1,9,3,2,10) df<-data.frame(x,y1,y2) 我想求x的值,对于y1和y2,它是x的最小值 我希望达到df的以下输出: y1 y2 a3 a2 b1 b2 我怎样才能到达那个地方?我

让我拥有以下数据框架df:

x=c("a1","a2","a3","b1","b2","b3")
y1=c(4,2,1,1,5,8)
y2=c(7,1,9,3,2,10)

df<-data.frame(x,y1,y2)
我想求x的值,对于y1和y2,它是x的最小值

我希望达到df的以下输出:

y1   y2
a3   a2
b1   b2
我怎样才能到达那个地方?我的原始数据要大得多


非常感谢。

您没有定义明确的组列,我们可以先创建一个。对于所示的示例,我们可以删除x列中的所有数字,并将其用作组列。对于每个组,我们可以找出列中的最小值,并得到相应的x值

library(dplyr)

df %>%
  group_by(group = sub('\\d+', '', x)) %>%
  summarise(across(y1:y2, ~x[which.min(.)]))

#  group y1    y2   
#  <chr> <chr> <chr>
#1 a     a3    a2   
#2 b     b1    b2   

您没有定义明确的组列,我们可以先创建一个。对于所示的示例,我们可以删除x列中的所有数字,并将其用作组列。对于每个组,我们可以找出列中的最小值,并得到相应的x值

library(dplyr)

df %>%
  group_by(group = sub('\\d+', '', x)) %>%
  summarise(across(y1:y2, ~x[which.min(.)]))

#  group y1    y2   
#  <chr> <chr> <chr>
#1 a     a3    a2   
#2 b     b1    b2   
我们可以用

library(stringr)
library(dplyr)
df %>% 
    group_by(grp = str_remove(x, "\\d+")) %>% 
    summarise(across(where(is.numeric), ~ x[which.min(.)]))
# A tibble: 2 x 3
#  grp   y1    y2   
#  <chr> <chr> <chr>
#1 a     a3    a2   
#2 b     b1    b2   
我们可以用

library(stringr)
library(dplyr)
df %>% 
    group_by(grp = str_remove(x, "\\d+")) %>% 
    summarise(across(where(is.numeric), ~ x[which.min(.)]))
# A tibble: 2 x 3
#  grp   y1    y2   
#  <chr> <chr> <chr>
#1 a     a3    a2   
#2 b     b1    b2   
data.table选项

data.table选项