как создать попарную таблицу на основе столбца для разделения между элементами в r - PullRequest
0 голосов
/ 03 февраля 2020

I фрейм данных (d), который я хочу сделать попарным делением между элементами в столбце%

> d

x %
a 3
b 10
c 5

Я хочу сделать попарно это

     3  |5   |10
a 3 |1  |0.6 |0.3
b 5 |1.7|1   |2
c 10|3.3|2   |1

спасибо .

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Мы можем использовать outer

outer(d$`%`, d$`%`, `/`)

Мы можем добавить к нему имена строк и столбцов.

matrix(outer(d$`%`, d$`%`, `/`), nrow(d), dimnames = list(d$`%`, d$`%`))

#      3  10   5
#3  1.00 0.3 0.6
#10 3.33 1.0 2.0
#5  1.67 0.5 1.0

данные

d <- structure(list(x = structure(1:3, .Label = c("a", "b", "c"), class = "factor"),
`%` = c(3L, 10L, 5L)), class = "data.frame", row.names = c(NA, -3L))
0 голосов
/ 03 февраля 2020

Мы можем использовать tidyverse функции

library(tibble)
library(dplyr)
library(tidyr)
expand(d, col1 = `%`, col2 = `%`) %>% 
     mutate(new = col1/col2) %>%
     pivot_wider(names_from = col2, values_from = new) %>% 
     column_to_rownames('col1')
#         3   5  10
#3  1.000000 0.6 0.3
#5  1.666667 1.0 0.5
#10 3.333333 2.0 1.0

данные

d <- structure(list(x = structure(1:3, .Label = c("a", "b", "c"), class = "factor"), 
    `%` = c(3L, 10L, 5L)), class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...