У меня следующий набор данных
mark <- c("0", "A", "B", "C", "D", "E")
phy <- c(0, 1, 10, 15, 18, 20)
gen <- c(0, 3, 35.0, 55, 60, 65)
mydata <- data.frame (mark, phy, gen)
mark phy gen
1 0 0 0
2 A 1 3
3 B 10 35
4 C 15 55
5 D 18 60
6 E 20 65
Я хочу вычесть последовательные числа в phy и gen (1 из 2, 2 из 3 и т. Д. До конца) и рассчитать соотношение, например дляпервый случай
(phy[2] - phy[1]) / (gen[2] - gen[1])
аналогично для второго случая будет
(phy[3] - phy[2]) / (gen[3] - gen[2])
и так далее.
Таким образом, результат будет
phydis <- phy[i+1] - phy[i], where i is 1:6 (end of the data frame)
ratio <- (phy[i+1] - phy[i]) / (gen[i+1] - gen[i])
мои ручные вычисления:
phydis <- c(1, 9, 5, 3, 2)
disg <- c(3, 32, 20, 5, 5)
ratio <- phydis / disg
ratio
[1] 0.3333333 0.2812500 0.2500000 0.6000000 0.4000000
Отношение - это коэффициент преобразования для второго набора данных.Если что-либо между двумя значениями phy в указанном выше наборе данных будет умножено на соответствующее соотношение.
Мой второй набор данных:
mark <- c("i", "k", "l", "m", "n", "o", "p")
phy <- c(3, 11, 12, 15, 17,18, 20)
mydf2 <- data.frame(mark, phy)
mark phy
1 i 3
2 k 11
3 l 12
4 m 15
5 n 17
6 o 18
7 p 20
Как отметка i попадает между mydata $ phy 1-10, будетумноженное на коэффициент 0,2812500, аналогичным образом значение k phy, попадающее между mydata $ phy 10-15, будет умножено на коэффициент 0,2500000.Таким образом, полная математика:
mark phy gen
1 i 3 3 * 0.2812500
2 k 11 11* 0.2500000
3 l 12 12 * 0.2500000
4 m 15 15 * 0.2500000
5 n 17 17 * 0.6000000
6 o 18 18 * 0.6000000
7 p 20 20 * 0.4000000
В отличие от набора данных, представленного здесь, у меня есть большой набор данных для работы.
Правки:
Позвольте мне прояснить в отношении второй части:
на основе первой части мы рассчитали соотношение между интервалами -
0 - 1, 1-10, 10-15, 15-18, 18-20
0.3333333 0.2812500 0.2500000 0.6000000 0.4000000
ТеперьФактор продукта будет зависеть от того, где значение mydf2 $ phy попадает в эти интервалы.Например, первое значение mydf2 $ phy = 3, которое падает между 1-10, таким образом, будет умножено на 0.2812500, второе значение равно 11, которое находится между 10-15, таким образом, будет умножено на 0.2500000 и так далее.