首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为某些变量找到ara最小的类别值-R

为某些变量找到ara最小的类别值-R
EN

Stack Overflow用户
提问于 2021-05-28 06:23:58
回答 3查看 36关注 0票数 1

让我有以下数据框架(Df):

代码语言:javascript
复制
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)

即:

代码语言:javascript
复制
> df
   x y1 y2
1 a1  4  7
2 a2  2  1
3 a3  1  9
4 b1  1  3
5 b2  5  2
6 b3  8 10

我想要找到x的值,x的最小值对于y1和y2都是x的组。

我想达到以下df的输出:

代码语言:javascript
复制
y1   y2
a3   a2
b1   b2

我怎样才能达到那种地步?我的原始数据要大得多。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-28 06:29:07

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

代码语言:javascript
复制
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   
票数 2
EN

Stack Overflow用户

发布于 2021-05-28 18:55:45

我们可以用

代码语言:javascript
复制
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   
票数 2
EN

Stack Overflow用户

发布于 2021-05-28 19:07:40

data.table选项

代码语言:javascript
复制
> setDT(df)[, lapply(.SD, function(v) x[which.min(v)]), .(grp = gsub("\\d", "", x))]
   grp y1 y2
1:   a a3 a2
2:   b b1 b2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67733824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档