在R中重新排列数据帧
下面的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移动到末尾列?这里
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)]))