在R中重新排列数据帧

在R中重新排列数据帧,r,dataframe,R,Dataframe,下面的R代码从我目前使用的数据帧生成一个片段: rep1 <- c("20/02/01","23/03/02") rep2 <- c(NA, "03/05/02") rep3 <- c("16/04/01",NA) rep4 <- c(NA,"12/02/03") data <- data.frame(rep1 = rep1, rep2 = rep2, rep3 = rep3, rep4 = rep4) rep1我不确定是否理解,但您似乎想将NA移动到末尾列?这里

下面的R代码从我目前使用的数据帧生成一个片段:

rep1 <- c("20/02/01","23/03/02")
rep2 <- c(NA, "03/05/02")
rep3 <- c("16/04/01",NA)
rep4 <- c(NA,"12/02/03")
data <- data.frame(rep1 = rep1, rep2 = rep2, rep3 = rep3, rep4 = rep4)

rep1我不确定是否理解,但您似乎想将NA移动到末尾列?这里有一种方法(快速完成;可能有更干净的方法):


按照文斯的建议,但可能要干净一点:

t(apply(d, 1, function(x) x[order(x)]))

请你再仔细一点好吗?在数据集中再给我们几行,这样我们就可以看到它是关于什么的了。当然,很抱歉不精确!我添加了一些R代码,生成了一个小样本数据帧,看起来就像我正在使用的数据帧。谢谢Vince,我已经详细说明了这个问题,但这正是我想要的!当应用于向量时,
rbind
返回类
矩阵的对象,因此无需将其转换为
数据.frame
以便在其上运行
apply
,因为
apply
数据.frame
上运行时将返回
矩阵。如果要对值进行排序,请尝试
t(apply(data,1,sort,na.last=TRUE))
如果有意使用数据帧,因为这就是OP的问题所在。这将改变原始顺序。但是如果您执行
t(应用(数据,1,函数(x)x[order(is.na(x))))
则应该可以。
      rep1     rep2   rep3     rep4
1 20/02/01 16/04/01    <NA>     <NA>
2 23/03/02 03/05/02   12/02/03   <NA> 
> d <- data.frame(rbind(c(1, 2, NA, 4, NA, 6), c(NA, 2, 3, 4, 5, 6)))
> d
  X1 X2 X3 X4 X5 X6
1  1  2 NA  4 NA  6
2 NA  2  3  4  5  6
> t(apply(d, 1, function(x) c(x[!is.na(x)], rep(NA, sum(is.na(x))))))
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    4    6   NA   NA
[2,]    2    3    4    5    6   NA
> t(apply(data, 1, function(x) c(x[!is.na(x)], rep(NA, sum(is.na(x))))))
     [,1]       [,2]       [,3]       [,4]
[1,] "20/02/01" "16/04/01" NA         NA  
[2,] "23/03/02" "03/05/02" "12/02/03" NA  
t(apply(d, 1, function(x) x[order(x)]))