Рассчитать соотношение нескольких пар столбцов - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть таблица в R, как эта:

id  v1  v2  v3
1   115 116 150
2   47  50  55
3   70  77  77

Я хотел бы рассчитать соотношение между v2 / v1 как (v2 / v1) -1, v3 / v2 как (v3 / v2) -1 и т. Д. (У меня около 55 переменных, и мне нужно получить такие значения:

id  v1  v2  v3  rat1    rat2
1   115 116 150 0.01    0.29
2   47  50  55  0.06    0.10
3   70  77  77  0.10    0.00

Есть ли обходной путь, поэтому мне не нужно кодировать каждую пару независимо?

Thx!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Поскольку мы удаляем равное количество столбцов из начала и конца (общий идентификатор), наборы данных по-прежнему будут одинаковыми по размерам, поэтому можно напрямую сделать данные /

dat[paste0("rat", 1:2)] <- 1- dat[-c(1, ncol(dat))]/dat[-(1:2)]

dat <- structure(list(id = 1:3, v1 = c(115L, 47L, 70L), v2 = c(116L, 
50L, 77L), v3 = c(150L, 55L, 77L)), class = "data.frame", row.names = c(NA, 
 -3L))
0 голосов
/ 25 февраля 2019

По сути это цикл по столбцу i и столбцу i+1, для которого можно написать цикл for.Или на языке R, используйте векторизованную функцию, такую ​​как Map / mapply:

vars <- paste0("v",1:3)
outs <- paste0("rat",1:2)
dat[outs] <- mapply(`/`, dat[vars[-1]], dat[vars[-length(vars)]]) - 1

dat
#  id  v1  v2  v3        rat1      rat2
#1  1 115 116 150 0.008695652 0.2931034
#2  2  47  50  55 0.063829787 0.1000000
#3  3  70  77  77 0.100000000 0.0000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...