我想提取具有最小值的列和行的名称,并按种类名称分组。例如,如果DB是下面的示例,则对于Ag物种,结果将是V1(列名),在ow(行名)中,Au物种的结果将为pre,对于Bri物种的结果将为V1(后)。
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 ==: 下标类型无效“列表””
任何人都可以建议,这真是太棒了!
答案 0 :(得分:1)
您可以尝试在两列带有值的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