[英]Rearranging a data frame in R
以下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 rep2 rep3 rep4
1 20/02/01 <NA> 16/04/01 <NA>
2 23/03/02 03/05/02 <NA> 12/02/03
我想重新排列這個數據框,所以它看起來像這樣:
rep1 rep2 rep3 rep4
1 20/02/01 16/04/01 <NA> <NA>
2 23/03/02 03/05/02 12/02/03 <NA>
也就是說,對於每一行,我想用行中的下一個條目替換每個NA,直到該行中只剩下NAs。
真正的數據框由數千行組成,因此手動執行此操作意味着辦公室的許多工作時間。
如果有人能告訴我如何在R中這樣做,我將非常感激!
我不確定我理解,但似乎你想把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)]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.