2015-08-07 3 views
1

Я пытаюсь объединить два подмножества DataFrame вместе, но ни слияние, ни cbind, похоже, делают именно то, что я хочу. До сих пор у меня есть это:слияние значений по горизонтали в dataframe

library(psych) 
df1<-NULL 
df1$a<-c(1,2,3,4,5) 
df1$b<-c(4,5,2,6,1) 
df1$c<-c(0,9,0,6,3) 
df1$gender<-c(0,0,0,1,1) 
df1<-as.data.frame(df1) 

male<-subset(df1,gender<1) 
male<-male[,-c(4)] 
female<-subset(df1,gender>=1) 
female<-female[,-c(4)] 

library(psych) 
merge(corr.test(male)$r,corr.test(female)$r) 

Моя конечная цель что-то вроде этого в каждой клетке:

 a  b     c 
a 1/1 -0.6546537/-1 0/-1 
.... 
+1

не ясно мне желаемый результат , Числа этой матрицы (или фрейма данных): результат 'corr.test' для мужчины *, деленный на * результат' corr.test' для женщин? – SabDeM

+0

Извините, '' 'предназначен просто быть разделителем между двумя значениями НЕ символ деления – Rilcon42

+0

@ Rilcon42 Итак, вы на самом деле не пытаетесь объединить значения ... Это всего лишь способ выразить их. Кстати, если вы действительно хотите «вставить» a/b, вы будете работать с символами, а не цифрами, не так ли? Кроме того, в cor.test, что вы точно пытаетесь сопоставить? cor.test требует аргументов x и y –

ответ

2

Вы можете объединить записи в обеих матрицах, а затем просто зафиксировать размеры нового вектора быть таким же, как выход corr.test, используя dim<-, aka dim(...) <-.

## Concatenate the entries 
strs <- sprintf("%s/%s", round(corr.test(male)$r,2), 
       round(corr.test(female)$r, 2)) 

## Set the dimensions 
dim(strs) <- c(3,3) 

## Or (to have the value returned at the same time) 
`dim<-`(strs, c(3, 3)) 
#  [,1]  [,2]  [,3]  
# [1,] "1/1"  "-0.65/-1" "0/-1" 
# [2,] "-0.65/-1" "1/1"  "0.76/1" 
# [3,] "0/-1"  "0.76/1" "1/1" 

Другой трюк, если вы хотите, чтобы эти rownames и имена столбцов, как в выводе corr.test, и не придется беспокоиться о размерах,

## Get one result 
ctest <- corr.test(male)$r 

## Concatenate 
strs <- sprintf("%s/%s", round(ctest,2), 
       round(corr.test(female)$r, 2)) 

## Overwrite the matrix with the strings 
ctest[] <- strs 

ctest 
# a   b   c  
# a "1/1"  "-0.65/-1" "0/-1" 
# b "-0.65/-1" "1/1"  "0.76/1" 
# c "0/-1"  "0.76/1" "1/1" 
+0

Это абсолютно здорово! Благодаря! – Rilcon42

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