2013-11-01 56 views
3

我被困在這個問題上,很樂意提供建議。我有以下data.frame移動數據幀每行的最後兩個元素

c1 <- factor(c("a","a","a","a")) 
c2 <- factor(c("b","b","y","b")) 
c3 <- factor(c("c","y","z","c")) 
c4 <- factor(c("y","z","","y")) 
c5 <- factor(c("z","","","z")) 
x <- data.frame(c1,c2,c3,c4,c5) 

所以這個數據看起來像這樣:

c1 c2 c3 c4 c5 
1 a b c y z 
2 a b y z 
3 a y z  
4 a b c y z 

因此在每一行中,有不同長度的A,B,C,其與爲值結束的序列y和z。我需要做的是移動值y和z各自以單獨的列,我可以工作,所以數據是這樣的:

c6 c7 c8 c9 c10 
1 a b c y z 
2 a b  y z 
3 a  y z 
4 a b c y z 

我已經制定了識別每排各序列的長度和補充說,一列,所以我知道列y和z位於其中:

x$not.na <- apply(paths, 1, function(x) length(which(!x==""))) 

但我被困在如何循環每一行執行z和y的必要剪切和粘貼(?) 。

+1

你有沒有考慮過這個數據的二進制表示? '庫(reshape2);表(熔化(as.matrix(x))[c(「Var1」,「value」)])'也許? – A5C1D2H2I1M1N2O1R2T1

回答

4

事情是這樣的:

lastTwoToEnd<-function(x){ 
    i<-sum(x!="")-1:0 
    x[c(setdiff(seq_along(x),i),i)] 
} 
data.frame(t(apply(x,1,lastTwoToEnd))) 
## X1 X2 X3 X4 X5 
## 1 a b c y z 
## 2 a b  y z 
## 3 a  y z 
## 4 a b c y z 
+0

謝謝你,作品像一個魅力!我不能說我明白所發生的一切,但我會盡力解決它。 – user2702613

相關問題