我有一个数据框,其中包含许多站点不同年份和月份的AHD值。我有另一个数据框,其中每个站点最多可包含4个地块的高程数据。我需要从每个湿地中每个样地的高程中减去测得的AHD。这是一个很大的数据集,所以我一直在尝试使用循环来最大程度地减少所需的代码量。
我一直在尝试使用嵌套循环从一个数据帧中提取值以从另一个data.frame中减去。我似乎无法使其正常工作。
# Example data
Dates <- rep(seq(as.Date("1/1/2010"), by = "month", length.out = 24),5)
Site <- rep(letters[1:5], each=24)
AHD <- runif(120, min = 12, max = 50)
df1 <- data.frame(cbind(as.Date(Dates), Site, AHD))
df1$AHD <- as.numeric(df1$AHD)
Site <- rep(letters[1:5], each=4)
Plot <- rep(LETTERS[seq( from = 1, to = 4 )],5)
elv <- runif(20, min = 12, max = 50)
df2 <- data.frame(cbind(Site, Plot, elv))
df2$elv <- as.numeric(df2$elv)
我需要的是一个data.frame,其中包含每个站点上每个图的调整后的AHD值。所得的data.frame将具有列“ data”,“ site”,“ plot”和“ adjAHD”,其中“ adjAHD” = df1 $ AHD-df2 $ elv。该数据框将具有600行(120 x 5)行,因为每个站点的每个日期都将被复制到四个图上。
答案 0 :(得分:1)
使用akrun方法说明:
df3 <- merge(df1, df2, by = "Site")
df3$adjAHD <- df3$AHD - df3$elv
head(df3)
# Site V1 AHD Plot elv adjAHD
# 1 a -719143 86 A 4 82
# 2 a -719143 86 B 15 71
# 3 a -719143 86 C 17 69
# 4 a -719143 86 D 9 77
# 5 a -719112 45 A 4 41
# 6 a -719112 45 B 15 30
dim(df3)
# [1] 480 6