Переопределение и объединение двух таблиц в R или SAS - PullRequest
2 голосов
/ 22 сентября 2011

У меня есть две таблицы (матрицы) одинаковых размеров, одна содержит коэффициенты корреляции, а другая - значения p. Я хочу объединить их в один стол. Например, допустим, у меня есть коэффициент корреляции между переменной A1 и A2, равный 0,75 в таблице 1, и значение p, равное 0,045 в таблице 2. Теперь в моей комбинированной таблице 3 я хочу использовать:

условие1 для таблицы 1: если значение коэффициента в ячейке таблицы 1 меньше 0,4, то «+», 0,4 <= коэффициент <0,7, тогда «++», иначе «+++», </p>

условие 2 для таблицы 2: если значение pvalue в ячейке таблицы 2 меньше 0,01, тогда "+++", 0,01 <= pvalue <.05, тогда "++", иначе "+". </p>

Таким образом, соответствующее значение ячейки для A1 и A2 в таблице 3 должно выглядеть следующим образом: +++ / ++, где «+++» соответствует значению таблицы 1 0,75, а ++ соответствует значению таблицы 2 p 0,045 и « / "это просто разделитель.

Я хотел бы сделать это либо SAS, либо R .

1 Ответ

4 голосов
/ 05 октября 2011

Вот решение с R

Сначала создайте несколько фиктивных данных для работы с

corr <- matrix(runif(16),4,4)
ps <- matrix(runif(16)^5,4,4)

Каждая матрица может быть отформатирована отдельно.Обратите внимание, что это опускает их до векторов.Структура матрицы будет восстановлена ​​после вставки двух форматированных версий.

corr.fmt <- cut(corr, c(0, 0.4, 0.7, 1), labels=c("+","++","+++"))
ps.fmt <- cut(ps, c(0, 0.01, 0.05, 1), labels=c("+++","++","+"))
res <- matrix(paste(corr.fmt, ps.fmt, sep="/"), nrow(corr), ncol(corr))

Это можно объединить в один оператор, если вы хотите поместить преобразования в строку

res <- matrix(paste(cut(corr, c(0, 0.4, 0.7, 1), labels=c("+","++","+++")), 
                    cut(ps, c(0, 0.01, 0.05, 1), labels=c("+++","++","+")), 
                    sep="/"), nrow(corr), ncol(corr))
...