我希望有人可以帮助我应对这一挑战(我对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
中的X
和Y
记录在Parameters
上执行简单的功能(即{{ 1}})用于相应的X * Dbh^Y
。如果Species
的记录不在Plots$Spp
(即XS或TL),我需要使用OTH的X和Y值。
我首先尝试使用Parameters$Species
,但无法使其与XS / OTH情况一起使用。我还尝试了一个带有嵌套if / else if / else的for循环,但我又失败了。任何帮助将不胜感激!
答案 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)