2016-05-30 6 views
1

データフレーム内のデータを移動しようとしています。私はデータフレーム内のデータ移動

Tree <- c(1:10) 
height0 <- c(0,0,0,0,0,0,0,0,0,0) 
height1 <- c(1.5,2.0,0.0,1.2,1.3,0.9,0.0,0.0,1.8,0.0) 
height2 <- c(2.4,2.2,1.1,1.9,1.4,1.7,0.0,0.0,2.7,0.0) 
height3 <- c(3.1,2.9,2.1,2.6,2.2,2.4,0.0,0.6,3.6,0.0) 
height4 <- c(3.8,3.4,2.9,3.0,2.9,3.1,0.0,1.1,4.1,0.0) 
height5 <- c(4.2,3.7,3.6,3.7,3.5,3.8,0.7,1.9,4.6,0.0) 
height6 <- c(4.4,4.1,4.1,4.2,4.0,4.5,1.6,2.6,4.9,1.2) 
height7 <- c(4.7,4.4,4.3,4.6,4.2,4.9,2.2,3.0,5.1,2.0) 


df <- data.frame(Tree, height0, height1, height2, height3, height4, height5, height6, height7) 

に従うように、データフレームDFが私は従う

df 
    Tree height0 height1 height2 height3 height4 height5 height6 height7 
1  1  0  1.5  2.4  3.1  3.8  4.2  4.4  4.7 
2  2  0  2.0  2.2  2.9  3.4  3.7  4.1  4.4 
3  3  0  0.0  1.1  2.1  2.9  3.6  4.1  4.3 
4  4  0  1.2  1.9  2.6  3.0  3.7  4.2  4.6 
5  5  0  1.3  1.4  2.2  2.9  3.5  4.0  4.2 
6  6  0  0.9  1.7  2.4  3.1  3.8  4.5  4.9 
7  7  0  0.0  0.0  0.0  0.0  0.7  1.6  2.2 
8  8  0  0.0  0.0  0.6  1.1  1.9  2.6  3.0 
9  9  0  1.8  2.7  3.6  4.1  4.6  4.9  5.1 
10 10  0  0.0  0.0  0.0  0.0  0.0  1.2  2.0 

のように見えるように例のデータが見え

1.高さに0にすべての最初の値が等しくない移動します最初の高さの値をすべて高さ1に移動しようとすると、すべての樹木が同時に発芽したわけではないので、成長速度を比較し、発芽の違いによって誤った結果を得たくないだけです。

だから何その後続く

df 
Tree height0 height1 height2 height3 height4 height5 height6 height7 
1  1  0  1.5  2.4  3.1  3.8  4.2  4.4  4.7 
2  2  0  2.0  2.2  2.9  3.4  3.7  4.1  4.4 
3  3  0  1.1  2.1  2.9  3.6  4.1  4.3  
4  4  0  1.2  1.9  2.6  3.0  3.7  4.2  4.6 
5  5  0  1.3  1.4  2.2  2.9  3.5  4.0  4.2 
6  6  0  0.9  1.7  2.4  3.1  3.8  4.5  4.9 
7  7  0  0.7  1.6  2.2  
8  8  0  0.6  1.1  1.9  2.6  3.0  
9  9  0  1.8  2.7  3.6  4.1  4.6  4.9  5.1 
10 10  0  1.2  2.0 

ようであるように私のデータが好きすべきは、任意のは、これを行う方法はありますか?

私は40回測定された3000以上の木を持っており、それを手動で行うことは、長い

に連れて行くために起こっている

+0

「NA」または「 "」で他の値を入力しますか?それが空白の場合、それはクラスを変更する – akrun

+0

NAは私が最終的にこれから成長曲線を描きたいので、最高になるだろう –

答えて

3

一つの選択肢は、行(MARGIN = 1apply)をループになり、ありがとうございましたゼロ以外の要素を抽出し、残りの部分をlength<-を使用してNAで埋める)、出力を転置して戻します。

df[-(1:2)] <- t(apply(df[-(1:2)], 1, function(x) `length<-`(x[x!=0], ncol(df)-2))) 
df 
# Tree height0 height1 height2 height3 height4 height5 height6 height7 
#1  1  0  1.5  2.4  3.1  3.8  4.2  4.4  4.7 
#2  2  0  2.0  2.2  2.9  3.4  3.7  4.1  4.4 
#3  3  0  1.1  2.1  2.9  3.6  4.1  4.3  NA 
#4  4  0  1.2  1.9  2.6  3.0  3.7  4.2  4.6 
#5  5  0  1.3  1.4  2.2  2.9  3.5  4.0  4.2 
#6  6  0  0.9  1.7  2.4  3.1  3.8  4.5  4.9 
#7  7  0  0.7  1.6  2.2  NA  NA  NA  NA 
#8  8  0  0.6  1.1  1.9  2.6  3.0  NA  NA 
#9  9  0  1.8  2.7  3.6  4.1  4.6  4.9  5.1 
#10 10  0  1.2  2.0  NA  NA  NA  NA  NA 
関連する問題