【问题标题】:querying one R data frame by matching multiple columns from a second data frame通过匹配来自第二个数据帧的多个列来查询一个 R 数据帧
【发布时间】:2016-01-20 15:15:42
【问题描述】:

假设我有一个数据集,描述了不同地点的不同物种的丰度,d1

site <- c(1:5)
species1 <- c('A','A','B','C','A')
abundance1<- c(0.11,0.45,0.87,1.00,0.23)
species2 <- c('B','C','A','A','C')
abundance2 <- 1 - abundance1  
d1<- data.frame(site,species1,abundance1,species2,abundance2)

因此,每个站点都有两个物种,并且有一个 abundance 列描述了每个物种所代表的整个群落的比例。

然后我有第二个数据集d2,它描述了一个地块内每个物种的一些性状测量,例如weight。因此,地块 1 中的物种 A 对 weight 的观察可能与地块 2 中的物种 A 不同。数据框 d2 如下所示:

site<- c(1,1,2,2,3,3,4,4,5,5)
species <- c('A','B','A','C','B','A','C','A','A','C')
weight <- rnorm(10, 50,4)
d2<- data.frame(site,species,weight)

我想在d1 中生成一个列,即weight 的丰度加权平均值,使用d2 中的weight 数据,以便为图中的每个物种分配他们对weight 的独特观察在最后的计算中。

新计算向量的第一个条目的预期输出将是函数的输出:

d1[1,3]*d2[1,3] + d1[1,5]*d2[2,3]

【问题讨论】:

  • 请显示预期输出
  • @mtoto 我已经解决了这个问题,抱歉。

标签: r


【解决方案1】:

Old school R. 使用其他软件包可能更简单,但这很简单apply

d1$newvec <-    apply(d1, 1, function(x) 
                      d2[d2$site==x[1]&d2$species==x[2],'weight']*as.numeric(x[3]) + 
                      d2[d2$site==x[1]&d2$species==x[4],'weight']*as.numeric(x[5]))

【讨论】:

    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2018-07-23
    • 2018-09-06
    • 2015-10-19
    相关资源
    最近更新 更多