让我有以下数据框架(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)即:
> 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的输出:
y1 y2
a3 a2
b1 b2我怎样才能达到那种地步?我的原始数据要大得多。
非常感谢。
发布于 2021-05-28 06:29:07
您没有明确的组列定义,我们可以先创建一个列。对于所示的示例,我们可以从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 发布于 2021-05-28 18:55:45
我们可以用
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 发布于 2021-05-28 19:07:40
data.table选项
> setDT(df)[, lapply(.SD, function(v) x[which.min(v)]), .(grp = gsub("\\d", "", x))]
grp y1 y2
1: a a3 a2
2: b b1 b2https://stackoverflow.com/questions/67733824
复制相似问题