移动数据帧的每一行的最后两个元素

时间:2013-11-01 12:52:58

标签: r dataframe

我坚持这个问题,很乐意接受建议。我有以下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 个答案:

答案 0 :(得分: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