2016-10-05 7 views
1

У меня есть два набора данных, которые содержат столбцы с одинаковыми именами, но разные значения в этих столбцах. например:Корреляция между двумя соответствующими столбцами из отдельных наборов данных

m1 <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE, 
      dimnames = list(c("s1", "s2", "s3"),c("cow", "dog","cat"))) 
m2 <- matrix(1:9, nrow = 3, ncol = 3, byrow = FALSE, 
      dimnames = list(c("s1", "s2", "s3"),c("dog", "cow","cat"))) 
> m1 
    cow dog cat 
s1 1 2 3 
s2 4 5 6 
s3 7 8 9 
> m2 
    dog cow cat 
s1 1 4 7 
s2 2 5 8 
s3 3 6 9 

Я хотел бы создать функцию, используя cor.test() для вычисления корреляции между соответствующими столбцами. Например. корова против коровы, собака против собаки. Причина использования cor.test() заключается в том, что я хочу получить коэффициент корреляции и p-значение. Итак, если есть другие способы получить эту информацию, я тоже открыт для них. Фактический набор данных содержит тысячи столбцов, которые организованы случайным образом, поэтому им нужно найти способ сначала сопоставить столбцы, а затем рассчитать корреляцию. Есть идеи?

ответ

2

Вот решение, используя lapply на общих столбцов:

# Common columns 
cols <- intersect(colnames(m1), colnames(m2)) 

# For each column, compute cor test 
res <- lapply(cols, function(x) cor.test(
    m1[, x], 
    m2[, x] 
)) 

names(res) <- cols 

В результате список htest объектов, которые вы можете получить доступ к так: res[["cow"]]

+0

работает как шарм, спасибо! – JMM

Смежные вопросы