r语言 - 用较早观测值的数据帧中的数据填充数据帧



我有 2 个带有观测值的数据帧,大部分是相同的图,但一个来自今年,一个来自 2012 年。我在Windows7上使用R studio。我想要的:在新的 data.frame 中创建一列,其直径为 5 年前的树我想要的:R 将比较 2 个 data.frame,如果位置和树 ID 数学化,则应在最近创建的新列中复制 2012 年 data.frame 的直径。到目前为止,我的代码是:

df17$dbh12[df17$LOC=="1"] <- ifelse((df12$ID[df12$LOC=="1"]) %in% (df17$ID[df17$LOC=="1"]), df12$DBH[df12$LOC=="1"], NA)

我的问题是:R正在这样做。但是,这两个数据帧并不相同。在2012年,有些树没有被考虑,因为它们看起来生病了,但现在它们仍然活着,我测量了它们。相反,其他树已经死了。我有10个地块。例如,我的数据和代码如下所示:

df2012=data.frame(LOC=1, ID=c(1,2,4,5,6), DBH=c(7.0, 7.5, 10.25, 14.5, 6.75))
df2017=data.frame(LOC=1, ID=c(2,3,4,5,6), DBH=c(7.8, 28.7, 10.3, 13.7, 7.8))
df2017$dbh12[df2017$LOC=="1"] <- ifelse((df2012$ID[df2012$LOC=="1"]) %in% (df2017$ID[df2017$LOC=="1"]), df2012$DBH[df2012$LOC=="1"], NA)

所以最后我有

> df2017
  LOC ID  DBH dbh12
    1  2  7.8    NA
    1  3 28.7  7.50
    1  4 10.3 10.25
    1  5 13.7 14.50
    1  6  7.8  6.75

我的问题:为什么树 2 没有 dbh?为什么树 3 有 dbh?R只是复制它们,无论ID是什么吗?我的错误在哪里?

我们可以做一个连接on,"LOC"和"ID">

library(data.table)
setDT(df2017)[df2012, dbh12 := i.DBH, on = .(LOC, ID)]
df2017
#   LOC ID  DBH dbh12
#1:   1  2  7.8  7.50
#2:   1  3 28.7    NA
#3:   1  4 10.3 10.25
#4:   1  5 13.7 14.50
#5:   1  6  7.8  6.75

在OP代码中,它只是基于"LOC"值的子集"ID",并没有match两个数据集之间的"ID"。 %in%返回一个逻辑向量,如果顺序不正确,它将根据值的出现顺序而不是"ID"的实际匹配来分配值

所以,在这里我们可以使用match

i1 <- with(df2017, match(ID[LOC==1], with(df2012, ID[LOC==1])))
df2017$dbh12 <- df2012$DBH[i1]
df2017$dbh12
#[1]  7.50    NA 10.25 14.50  6.75

相关内容

  • 没有找到相关文章

最新更新