2011-03-11 2 views
0

온라인에서이 문제에 대한 해결책을 찾지 못했습니다. 여기가있다 : 나는이 이름이 같은 dataframe가 DF1 있습니다data.frame에서 행렬로 대체

    PIM  WDR  MYC  OBX       
ILMN_1651282 0.555764 0.675233 0.5908629 0.4897703       
ILMN_1651354 0.6963458 0.8588675 0.9216328 0.88705       
ILMN_1651358 0.7501548 0.6766059 0.8157319 0.9373666       
ILMN_1652716 0.5505098 0.5802357 0.7342341 0.5953167       
ILMN_1654324 0.9294231 0.9311051 0.8424824 0.888825       
ILMN_1654639 0.9197155 0.4687101 0.678938 0.4309232       
ILMN_1655418 0.690068 0.6345875 0.9595042 0.6132203 

이 이름 같은 dataframefile가 DF2 :

  PIM WDR MYC OBX            
ILMN_1651282 -1 -1 -1 -1            
ILMN_1651354 -1 1 1 1            
ILMN_1651358 1 1 1 1            
ILMN_1652716 -1 -1 -1 -1            
ILMN_1654324 -1 -1 -1 -1            
ILMN_1654639 -1 -1 -1 -1            
ILMN_1655418 1 1 -1 1 

내가 0.8의 컷오프 값을 갖는다. DF1 0.8보다 큰 모든 값을 0으로 변경 0.8 미만 값 DF2의 값으로 대체한다 (1 & -1)

DF2가 생성 :

PIMvsEV<-list() 
for (x in 1:nrow(df1)) { 
t<-(if (mean(PIM[,x]) > mean(EV[,x])) {print(1)} else 
if (mean(PIM[,x]) < mean(EV[,x])) {print(-1)}) 
PIMvsEV[[x]]<-matrix(t) 
} 

WDRvsEV<-list() 
for (x in 1:nrow(df1)) { 
t<-(if (mean(WDR[,x]) > mean(EV[,x])) {print(1)} else 
if (mean(WDR[,x]) < mean(EV[,x])) {print(-1)}) 
WDRvsEV[[x]]<-matrix(t) 
} 

OBXvsEV<-list() 
for (x in 1:nrow(cdf1)) { 
t<-(if (mean(OBX[,x]) > mean(EV[,x])) {print(1)} else 
if (mean(OBX[,x]) < mean(EV[,x])) {print(-1)}) 
OBXvsEV[[x]]<-matrix(t) 
} 

MYCvsEV<-list() 
for (x in 1:nrow(df1)) { 
t<-(if (mean(MYC[,x]) > mean(EV[,x])) {print(1)} else 
if (mean(MYC[,x]) < mean(EV[,x])) {print(-1)}) 
MYCvsEV[[x]]<-matrix(t) 
} 

dataframe<-as.data.frame(cbind(as.matrix(PIMvsEV), as.matrix(WDRvsEV))) 
dataframe<-as.data.frame(cbind(as.matrix(dataframe), as.matrix(MYCvsEV))) 
dataframe<-as.data.frame(cbind(as.matrix(dataframe), as.matrix(OBXvsEV))) 
row.names(dataframe)<-colnames(ttest) 
colnames(dataframe)<-c("PIM","WDR","MYC","OBX") 

어떤 생각? 사전에 많은 감사,

+0

적용 기능을 사용해 보셨습니까? http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/ –

+0

빠른 Q, 어떻게 df2를 파생 시켰습니까? –

+0

df1의 데이터에 행과 같은 행이 있다고 가정하는 것이 맞습니까? EV는 무엇입니까? –

답변

1

예 데이터 :

df1 <- as.data.frame(matrix(rnorm(100),10,10)) 
df2 <- as.data.frame(matrix(sample(c(-1,1),100,T),10,10)) 

data.frames 코드

res <- df1 
res[df1>0.8] <- 0 
res[df1<=0.8] <- df2[df1<=0.8] 
1

이 바로 원하는 일을해야

Lisanne?

일부 데이터 :

df1 <- as.data.frame(matrix(rnorm(100),10,10)) 
df2 <- matrix(sample(c(-1,1),100,T),10,10) 

벡터화 사용 ifelse의 :

ifelse(as.matrix(df1) > 0.8, 0, df2) 

     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
[1,] 0 0 1 -1 1 1 -1 -1 1 -1 
[2,] -1 1 1 -1 -1 -1 -1 -1 1 -1 
[3,] -1 -1 -1 0 0 -1 1 0 1 -1 
[4,] 0 -1 -1 1 -1 1 -1 1 1 1 
[5,] -1 -1 -1 -1 0 1 -1 1 0 0 
[6,] -1 1 1 1 -1 1 0 0 1 1 
[7,] -1 1 1 0 -1 -1 -1 -1 -1 -1 
[8,] 1 1 1 0 -1 -1 1 -1 0 -1 
[9,] 1 0 0 1 1 0 -1 -1 0 -1 
[10,] -1 -1 -1 -1 1 -1 -1 -1 -1 1 

또는 우리가 할 수있는

(df1<= 0.8)*df2 
+0

귀하의 솔루션에 많은 감사드립니다! 그게 내가 하루 종일 찾고있는거야! – lisanne