【问题标题】:Filling a matrix from a dataframe从数据框中填充矩阵
【发布时间】:2020-10-27 10:55:00
【问题描述】:

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

loc1 - 林地中的位置

loc2 - 所有与 loc 1 相同的位置

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

> 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

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

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

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))

下一步是我完全迷失的地方,我找不到以我想要的方式填充矩阵的方法 理想情况下,我想要这样的东西,我可以看到所有位置以及它们之间共享的所有个人

    1A  1B  1C ...
1A  36  2.3 0.2
1B  2.3 86  6.7

第一次在这里发帖,所以放轻松.... 并提前感谢

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    试试这个

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

    【讨论】:

    • @Keith。如果此答案已解决您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    【解决方案2】:

    您可以select 相关列,然后获取宽格式数据。如果你想loc1 作为行名,你可以使用column_to_rownames。

    library(dplyr)
    
    shared2015 %>%
      select(loc1:ninds) %>%
      tidyr::pivot_wider(names_from = loc2, values_from = ninds) %>%
      tibble::column_to_rownames('loc1')
    

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2018-09-03
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多