【发布时间】:2022-07-07 00:11:09
【问题描述】:
我想知道我是否可以将 tidyverse 用于迄今为止在 R 中使用列表的任务。 我得到了每个地块的物种丰度矩阵,我想用 vegan 包中的 vegdist 计算差异指数。之后我想把它放在长格式中删除自动比较等。 举个简单的例子,它就像 dplyr 的魅力:
library(tidyverse)
library(vegan)
df <- data.frame(spec1=sample.int(50,10,replace=T),
spec2=sample.int(75,10,replace=T),
spec3=sample.int(10,10,replace=T),
spec4=sample.int(40,10,replace=T),
spec5=sample.int(50,10,replace=T),
spec6=sample.int(5,10,replace=T))
df%>%
vegdist() %>%
as.matrix() %>%
as_tibble(rownames= "rownames") %>%
pivot_longer(-rownames) %>%
filter(rownames < name)
现在我想做同样的事情,但是物种属于不同的类别,每个类别都必须获得自己的距离矩阵,并且只有在它可以放回单个长格式数据框或 tibble 之后。
cat <- data.frame(spec=c("spec1","spec2","spec3","spec4","spec5","spec6"),
group=c("a","b","c","b","a","c"))
df%>%
pivot_longer(cols = everything(),values_to="abundance",names_to="spec")%>%
left_join(cat, by="spec")
一开始很简单,但在我习惯按列 group 将数据拆分为列表的时候,我正在努力寻找解决方案。我尝试了 group_by + pivot_wider + vegdist 或 group_split 的组合,但不幸的是无法想出一个可行的解决方案。有没有人有建议,或者我应该坚持这种情况的清单?
【问题讨论】:
标签: r list dplyr data-manipulation