r - 提取每组最小值的列名和行名
问题描述
我想提取具有最小值的列和行的名称,按物种名称分组。例如,如果 DB 是下面的示例,则结果将是物种 Ag 的 V1(列名)和 ow(行名),物种 Au 的结果是 V1 和 pre,物种 Bri 的结果是 V1 和 post。
species <- rep(c("Ag", "Au", "Bri"), each=4)
period<- rep(c("ow", "pre", "fp", "post"), l=12)
V1 <- c(1,3,5,10,18,3,15,6,3,3,46,1)
V2 <- c(2,4,5,2,8,13,5,98,54,34,56,11)
df<-data.frame(species, period, V1, V2)
我首先尝试使用列名,但没有成功:
AIC.min<- df %>%
group_by(species) %>%
mutate(min.model = names(df[2:3])[apply(df[2:3],1,function(x) which(x==min(x)))])
我还尝试了过滤器和选择,以及聚合而不是应用以下类似问题,但没有成功。没有一个对我有用,在这里我收到一条错误消息“名称错误(models.AIC.all[2:8])[apply(models.AIC.all[2:8], 1, function(x) which(x == : 无效的下标类型 'list'"
任何人都可以建议将是令人难以置信的真棒!
解决方案
您可以尝试gather()
两列的值,然后mutate()
找到每个物种周期配对的最低值,并filter()
返回这些列。
df %>% gather(k,v,-period,-species) %>%
group_by(species) %>% mutate(low=ifelse(v==min(v),1,0)) %>%
filter(low==1)
# A tibble: 3 x 5
# Groups: species [3]
species period k v low
<fct> <fct> <chr> <dbl> <dbl>
1 Ag ow V1 1 1
2 Au pre V1 3 1
3 Bri post V1 1 1
推荐阅读
- api - 分页计数器
- c - 使用 makefile 生成库:没有生成目标的规则
- php - Bootstrap 不适用于通过 php 自动生成的卡片
- vb.net - 如何在有多行时从文本文件中读取文本并生成一个字符串,以便我可以将其用作 sqlconnection 字符串?
- python - Plotly Dash - 模式匹配回调无法正常工作
- javascript - 未捕获的类型错误:无法在 HTMLDivElement 处读取 null 的属性“classList”。
- jquery - 如何向 jQuery 验证器函数添加附加参数
- python - 对输入使用列表并查看它是否包含列表中的任何内容
- r - 从非常大的对列表中提取单链接集群
- php - 使控制器更薄。拉拉维尔 8