Умножение всех строк на другую строку из того же кадра данных - PullRequest
0 голосов
/ 07 января 2019

DATA

У меня есть набор данных, похожий на фиктивный ниже.

КОД

library(dplyr)
set.seed(111)
data <- tibble(ID = sort(sample(LETTERS, 10, F)),
                A = round(rnorm(10, 4, 1), 1),
                B = sample(0:20, 10, F),
                C = rep(c(33, 9), each = 5))
data <- rbind(data, c("ratio", 0.7, 0.25, 0.05))

ВОПРОС

Я хочу создать новый фрейм данных, в котором каждая строка умножается на строку, называемую коэффициентом (исключая первый столбец с идентификаторами). Строка отношения может быть затем удалена из выходной таблицы.

Есть ли простой способ сделать это в dplyr?

1 Ответ

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

dplyr больше подходит для операций со столбцами, а не для операций со строками, подобных этим. Но это довольно просто сделать в базе R:

library(dplyr)
set.seed(111)
data <- tibble(ID = sort(sample(LETTERS, 10, F)),
               A = round(rnorm(10, 4, 1), 1),
               B = sample(0:20, 10, F),
               C = rep(c(33, 9), each = 5))

ratio <- data.frame(A = 0.7, B = 0.25, C = 0.05) # your mutliplier
ratio <- ratio[rep(1, nrow(data)),] # replicated to match size of 'data'
data[2:4] <- data[2:4] * ratio # multiply

   ID        A     B     C
   <chr> <dbl> <dbl> <dbl>
 1 A      2.87  0.25  1.65
 2 B      1.75  2.5   1.65
 3 H      2.10  2     1.65
 4 I      2.17  4.5   1.65
 5 K      2.45  1.5   1.65
 6 L      2.66  2.75  0.45
 7 P      2.52  5     0.45
 8 S      4.06  4.75  0.45
 9 V      3.08  4.25  0.45
10 X      3.36  2.25  0.45

В качестве альтернативы, вы можете избежать дублирования своего фрейма данных "пропорции" для соответствия размеру основного набора данных с помощью Map:

ratio <- data.frame(A = 0.7, B = 0.25, C = 0.05)  
data[2:4] <- Map('*', data[2:4], ratio)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...