首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >群,然后在许多列中找到max

群,然后在许多列中找到max
EN

Stack Overflow用户
提问于 2021-09-26 21:19:13
回答 2查看 35关注 0票数 1

我有一个有批号的数据集,每天以英寸为单位。很多批号都是重复的,我想找出某一批的最高值,一天内的最高值。因此,作为示例数据,我有:

代码语言:javascript
复制
day1= c( 1, 1.2, 1.5, 4, 6.2, NA, 7, 3.4, 3.4, 3.2)
day2= c( NA, 2.2, 1.9, 4.7, 6.9, NA, 11.1, 3.9, 3.9, 3.4)
day3= c( .9, 1.2, .8, 4, 5.9, NA, 5.2, 1.2, 1.2, .8)
lot=  c("id-1", "id-1", "id-1", "id-2", "id-3", "id-4", "id-4", "id-5", "id-5", "id-5")

df <-data.frame(day1, day2, day3, lot)

我想得到的是这样的东西:

代码语言:javascript
复制
> head(df_slim, n=10)
  day1 day2 day3  lot
1  1.5  2.2  1.2 id-1
2  4.0  4.7  4.0 id-2
3  6.2  6.9  5.9 id-3
4  7.0 11.1  5.2 id-4
5  3.4  3.9  1.2 id-5

我正在尝试下面的代码,但我知道我没有接近,并希望你能指出我的正确方向!谢谢!

代码语言:javascript
复制
df_slim <-  df %>% group_by(lot) %>% df[which.max(df$day1),]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-26 21:21:07

此代码将给出lot每天的最大值。

代码语言:javascript
复制
library(dplyr)

df %>% 
  group_by(lot) %>% 
  summarise(across(.cols = starts_with("day"),.fns = ~max(.,na.rm = TRUE)))

# A tibble: 5 x 4
 lot     day1  day2  day3
<chr>    <dbl> <dbl> <dbl>
1 id-1    1.5   2.2   1.2
2 id-2    4     4.7   4  
3 id-3    6.2   6.9   5.9
4 id-4    7    11.1   5.2
5 id-5    3.4   3.9   1.2
票数 1
EN

Stack Overflow用户

发布于 2021-09-26 21:20:45

如果需要对每一列分别执行此操作

代码语言:javascript
复制
library(dplyr)
df %>% 
   group_by(lot) %>% 
   summarise(across(everything(), ~ .[which.max(.)]))

-output

代码语言:javascript
复制
# A tibble: 5 × 4
  lot    day1  day2  day3
  <chr> <dbl> <dbl> <dbl>
1 id-1    1.5   2.2   1.2
2 id-2    4     4.7   4  
3 id-3    6.2   6.9   5.9
4 id-4    7    11.1   5.2
5 id-5    3.4   3.9   1.2

或者使用summarise_all

代码语言:javascript
复制
df %>%
    group_by(lot) %>% 
    summarise_all(max, na.rm = TRUE)
# A tibble: 5 × 4
  lot    day1  day2  day3
  <chr> <dbl> <dbl> <dbl>
1 id-1    1.5   2.2   1.2
2 id-2    4     4.7   4  
3 id-3    6.2   6.9   5.9
4 id-4    7    11.1   5.2
5 id-5    3.4   3.9   1.2

或者使用data.table

代码语言:javascript
复制
library(data.table)
setDT(df)[, lapply(.SD, max, na.rm = TRUE), lot]
    lot day1 day2 day3
1: id-1  1.5  2.2  1.2
2: id-2  4.0  4.7  4.0
3: id-3  6.2  6.9  5.9
4: id-4  7.0 11.1  5.2
5: id-5  3.4  3.9  1.2

或使用collapse

代码语言:javascript
复制
library(collapse)
fmax(nv(df), g = df$lot)
     day1 day2 day3
id-1  1.5  2.2  1.2
id-2  4.0  4.7  4.0
id-3  6.2  6.9  5.9
id-4  7.0 11.1  5.2
id-5  3.4  3.9  1.2

也可以在base Raggregate中完成。

代码语言:javascript
复制
aggregate(.~ lot, df, max)
   lot day1 day2 day3
1 id-1  1.5  2.2  1.2
2 id-2  4.0  4.7  4.0
3 id-3  6.2  6.9  5.9
4 id-4  7.0 11.1  5.2
5 id-5  3.4  3.9  1.2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69339030

复制
相关文章

相似问题

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