使用两个数据帧执行条件(aka查找)函数?

时间:2018-06-01 12:16:48

标签: r

我希望有人可以帮助我应对这一挑战(我对R来说相当新)。我有一个数据框(Plots),它有树种(Spp)和树大小(Dbh)的唯一记录。我有第二个数据框(参数),为每个物种的函数提供参数(X和Y)。

Plots
Id  Spp Dbh
414 SM  27.2
415 BE  17.4
416 YB  35.8
418 SM  43.5
419 SM  53.3
420 SM  53.3
421 SM  11.9
422 TL  27.5
423 XS  13.2

Parameters
Species X   Y
BE  1   10
SM  2   20
YB  3   30
OTH 4   40

我需要查看Plots$Spp的每条记录,并使用Plots$Dbh中的XY记录在Parameters上执行简单的功能(即{{ 1}})用于相应的X * Dbh^Y。如果Species的记录不在Plots$Spp(即XS或TL),我需要使用OTH的X和Y值。

我首先尝试使用Parameters$Species,但无法使其与XS / OTH情况一起使用。我还尝试了一个带有嵌套if / else if / else的for循环,但我又失败了。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

也许这种方法:

library(tidyverse)

Plots %>%
  mutate(Species = ifelse(Spp %in% Parameters$Species, Spp, "OTH")) %>%
  left_join(Parameters)

"Species"数据框中创建一个新变量Plots首先检查Plots$Spp是否在Parameters$Species,如果是,则Spp,如果不是"OTH" {1}}然后将结果数据框与Parameters"Species"列连接起来。

#output
   Id Spp  Dbh Species X  Y
1 414  SM 27.2      SM 2 20
2 415  BE 17.4      BE 1 10
3 416  YB 35.8      YB 3 30
4 418  SM 43.5      SM 2 20
5 419  SM 53.3      SM 2 20
6 420  SM 53.3      SM 2 20
7 421  SM 11.9      SM 2 20
8 422  TL 27.5     OTH 4 40
9 423  XS 13.2     OTH 4 40

数据:

Plots <- read.table(text = "Id  Spp Dbh
414 SM  27.2
415 BE  17.4
416 YB  35.8
418 SM  43.5
419 SM  53.3
420 SM  53.3
421 SM  11.9
422 TL  27.5
423 XS  13.2", header = T, stringsAsFactors = FALSE)

Parameters <- read.table(text = "Species X   Y
BE  1   10
SM  2   20
YB  3   30
OTH 4   40", header = T, stringsAsFactors = FALSE)