2017-07-14 18 views
1

我有值的數據幀代表的倍數變化爲這樣:與另一個數據幀ř替換數據幀值

> df1 <- data.frame(A=c(1.74,-1.3,3.1), B=c(1.5,.9,.71), C=c(1.1,3.01,1.4)) 
     A B C 
1 1.74 1.50 1.10 
2 -1.30 0.90 3.01 
3 3.10 0.71 1.40 

而作爲這樣p-值的數據幀匹配的行和相同列:

> df2 <- data.frame(A=c(.02,.01,.8), B=c(NA,.01,.06), C=c(.01,.01,.03)) 
    A B C 
1 0.02 NA 0.01 
2 0.01 0.01 0.01 
3 0.80 0.06 0.03 

我想要的是修改df1中的值,以便只保留在df2 < .05中具有相應的pvalue的值,否則用NA代替。請注意,在df2中也有NA。

> desired <- data.frame(A=c(1.74,-1.3,NA), B=c(NA,.9,NA), C=c(1.1,3.01,1.4)) 
> desired 
     A B C 
1 1.74 NA 1.10 
2 -1.30 0.9 3.01 
3 NA NA 1.40 

我第一次嘗試在這些數據框上使用矢量語法,並沒有奏效。然後我嘗試了一個for循環列,但也失敗了。

我不認爲我理解如何索引每個我,j位置,然後用基於邏輯的df2值替換df1值。

或者,如果有在R.

回答

4

更好的方法你可以試試這個:

df1[!df2 < 0.05 | is.na(df2)] <- NA 

日期:

> df1 
     A B C 
1 1.74 NA 1.10 
2 -1.30 0.9 3.01 
3 NA NA 1.40 
1

ifelseas.matrix似乎做的伎倆。

df1 <- data.frame(A=c(1.74,-1.3,3.1), B=c(1.5,.9,.71), C=c(1.1,3.01,1.4)) 
df2 <- data.frame(A=c(.02,.01,.8), B=c(NA,.01,.06), C=c(.01,.01,.03)) 

x1 <- as.matrix(df1) 
x2 <- as.matrix(df2) 

as.data.frame(ifelse(x2 >= 0.05 | is.na(x2), NA, x1)) 

結果

 A B C 
1 1.74 NA 1.10 
2 -1.30 0.9 3.01 
3 NA NA 1.40