2016-04-06 5 views
1

この質問に答えたものは何も見つかりませんでした。データフレーム内の前の列から新しい出力への変更を検出しました

私は、行の値が累積的に増加するデータを持っています。私は、これらの値が増加すると、値が変化したときに1を、そうでないときに0を与える同じサイズの新しいデータフレームをどの列に増やして出力するかを検出できるようにしたい。

例は、私は(私はラインに沿ってアイデアが

dfNew<- lapply(ifelse(df>=identical[,c(x)], 1, 0)) 

をオブ試してみた。しかし、明らかに、これは動作しません

ad bd cd dd ed 
1 0 1 1 1 1 
2 0 0 1 1 0 
3 0 0 0 0 1 
4 0 1 0 0 0 
5 0 0 1 1 0 

を出力 - 理想の

a<- c(0,0,0,0,0) 
b<- c(1,0,0,1,0) 
c<- c(2,1,0,1,1) 
d<- c(3,2,0,1,2) 
e<- c(4,2,1,1,2) 
df<- data.frame(a,b,c,d,e) 
df 

a b c d e 
1 0 1 2 3 4 
2 0 0 1 2 2 
3 0 0 0 0 1 
4 0 1 1 1 1 
5 0 0 1 2 2 

をDATA-ルーキーのビット)。どんな助けでも大歓迎です!

+0

を使用することができますか?また、毎回1ずつ増加するでしょうか? – Sotos

答えて

1

これは、行ごとの違いを取得する場合は、matrixStatsからrowDiffsはあなたの最初の列は常に0右になります

library(matrixStats) 
`colnames<-`(cbind(df[1],rowDiffs(as.matrix(df))), 
        paste0(names(df), "d")) 
# ad bd cd dd ed 
#1 0 1 1 1 1 
#2 0 0 1 1 0 
#3 0 0 0 0 1 
#4 0 1 0 0 0 
#5 0 0 1 1 0 
+1

パーフェクト - ありがとう! – bphillips

0

これは、それが行列を返します

+sapply(2:ncol(df), function(i) df[,i]>df[,i-1]) 

作業の主なビットを行うだろう、とあなたはdiff行方向を見つけることによって、多分、列名

+0

助けてくれてありがとう! – bphillips

1

を修正する必要があるでしょうか?

cbind(a = 0, t(apply(df, 1, diff))) 
#  a b c d e 
#[1,] 0 1 1 1 1 
#[2,] 0 0 1 1 0 
#[3,] 0 0 0 0 1 
#[4,] 0 1 0 0 0 
#[5,] 0 0 1 1 0 
+0

助けてくれてありがとう! – bphillips

関連する問題