从数据框填充矩阵

时间:2020-10-27 10:55:00

标签: r matrix

我有一个包含3个感兴趣的变量的数据框

loc1 -林地中的位置

loc2 -与loc 1中的位置相同

ninds -是在loc1中每周见到的个体的平均数量,随后在一年中随后在林地的其他任何位置见到 (您可以忽略最后两个列,对于这个问题并不重要)

msbuild cryptest.sln /t:Rebuild /p:Configuration=Release;RuntimeLibrary=MultiThreadedDLL
msbuild cryptest.sln /t:Rebuild /p:Configuration=Release;RuntimeLibrary=2

我正在尝试用名为loc1和列loc2的行填充矩阵,然后显示这些站点之间的共享个人

所以我创建了一个填充有NA的空白矩阵

> head(shared2015)
  loc1 loc2      ninds         p.d       p.sym
1   1A   1A 36.0000000 1.000000000 1.000000000
2   1B   1A  2.3333333 0.028243818 0.019634878
3   1C   1A  0.2222222 0.002828977 0.001951522
4   1D   1A  0.1250000 0.002155172 0.001373626
5   1E   1A  0.2222222 0.009460548 0.004568106
6   1F   1A  0.0000000 0.000000000 0.000000000

下一步是我完全迷失了方向,我找不到找到想要填充矩阵的方法 理想情况下,我希望这样的事情使我能够看到所有位置以及它们之间共享的所有个人

site.loc2<-sapply(shared2015,function(a)unique(shared2015$loc2))
site.loc1<-sapply(shared2015,function(a)unique(shared2015$loc1))
site.loc1<-site.loc1[,1]
site.loc2<-site.loc2[,1]
n.sites<-length(site.loc2)
share.x<-matrix(NA,n.sites, n.sites, dimnames = list(site.loc1,site.loc2))

第一次在这里发布,轻松进行...。 并预先感谢

2 个答案:

答案 0 :(得分:0)

尝试一下

share.x[as.matrix(shared2015[, c("loc1", "loc2")])] <- shared2015$ninds

答案 1 :(得分:0)

您可以loc1相关列,然后以宽格式获取数据。如果要将column_to_rownames作为行名,可以使用library(dplyr) shared2015 %>% select(loc1:ninds) %>% tidyr::pivot_wider(names_from = loc2, values_from = ninds) %>% tibble::column_to_rownames('loc1')

string!