2016-07-25 3 views
-4

減算した結果が負の値になる場合は、2つのデータフレームと特定の列の値をnullに設定します。例えば差分がゼロ未満の場合、2つのデータフレームの値をnullに置き換えます。

私は以下のようにDF1とDF2を持っている場合:

df1 <- cbind(v1=c(3,6,4,8,4), v2=c(8,6,7,3,5), v3=c(7,6,8,5,8)) 
df2 <- cbind(v1=c(5,3,8,7,9), v2=c(1,1,7,4,5), v3=c(7,1,2,5,3)) 

そして私は、列名のベクトルがあります。以下の減算の結果を使用して

v <- c('v1', 'v3') 

を:

df2[,v]-df1[,v] < 0 

v1 v3 
FALSE FALSE 
TRUE TRUE 
FALSE TRUE 
TRUE FALSE 
FALSE TRUE 

もし本当であれば、df1とdf2の両方の値をnullに設定したいと思います。

期待される結果:

DF1:

v1 v2 v3 
3  8  7 
NA 6  NA 
4  7  NA 
NA 3  5 
4  5  NA 

DF2:

v1 v2 v3 
5  1  7 
NA 1  NA 
8  7  NA 
NA 4  5 
9  5  NA 

感謝。

+1

期待を含めてくださいあなたが何を試してみましたか? – beetroot

答えて

0

これは、あなたが提供するものである。

df1 <- cbind(v1=c(3,6,4,8,4), v2=c(8,6,7,3,5), v3=c(7,6,8,5,8)) 
df2 <- cbind(v1=c(5,3,8,7,9), v2=c(1,1,7,4,5), v3=c(7,1,2,5,3)) 
v <- c('v1', 'v3') 

は今0(またはそのことについては任意の値)でdf3内のすべての正の値を置き換えdf3

# intermediate step: 
df3 <- df2[,v]-df1[,v] 

df2[,v] - df1[,v]から結果を保存し

df3[df3 > 0] <- 0 
df3 

編集:

索引彼らにdf3 > 0を使用し、df1df2で値を置き換えたい:

df1[df3 > 0] <- 0  # or some other value than 0 
df2[df3 > 0] <- 0  # or some other value than 0 
0

私が正しくあなたの質問を理解していれば、私は次を得る:

df1 <- cbind(v1=c(3,6,4,8,4), v2=c(8,6,7,3,5), v3=c(7,6,8,5,8)) 
df2 <- cbind(v1=c(5,3,8,7,9), v2=c(1,1,7,4,5), v3=c(7,1,2,5,3)) 
v <- c('v1', 'v3') 

ifelse(df2[,v] - df1[,v]<0,NA,df2[,v]-df1[,v]) 

ifelse関数は次のように使用されます。減算が0より小さい場合、答えはNAであり、そうでない場合は減算の結果です。これは私がサブセットvについての差を計算し、DF1とDF2にサブセットV値を置き換えるために、結果を使用することによって、これを達成することができました

 v1 v3 
[1,] 2 0 
[2,] NA NA 
[3,] 4 NA 
[4,] NA 0 
[5,] 5 NA 
+0

あなたの質問を編集して元の質問とはまったく異なるものを尋ねたので、この回答と質問との関連はなくなりました。 – user1945827

0

、内のコード結果:

df3 <- df1[,v]-df2[,v] 
df1[,v][df3<0] <- NA 
df2[,v][df3<0] <- NA 
関連する問題