Вычесть значения в фрейме данных на основе условия из другого фрейма данных - PullRequest
0 голосов
/ 30 января 2019

У меня есть фрейм данных, содержащий значения AHD в разные годы и месяцы для нескольких сайтов.У меня есть еще один фрейм данных с данными высот до 4 участков на каждом участке.Мне нужно вычесть измеренную AHD из высоты для каждого участка в каждом заболоченном месте.Это большой набор данных, поэтому я пытался использовать циклы, чтобы минимизировать объем необходимого кода.

Я пытался использовать вложенные циклы для извлечения значений из одного фрейма данных для вычитания из других данных.Рамка.Кажется, я не могу заставить его работать.

# 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) строк, поскольку каждая дата на каждом сайте будет реплицирована для четырех графиков.

1 Ответ

0 голосов
/ 30 января 2019

Используя метод акрун, объяснил:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...