我已经搜索了比我想承认的时间更长的时间,以便将领先的NA转移到最后。接近几个堆栈问题"在 R 中剪切外部 NA","在 R 中旋转矩阵","na.locf 删除前导 NA,保持其他 [关闭]"以及查看动物园包中的 na.trim 函数。 本质上我想把这个变成:
D <- matrix(c(1:9), 3)
D[2,1]<- NA
D[3,1]<- NA
D[3,2]<- NA
D <- as.data.frame(D)
进入这个:
D1 <- data.frame(V1 = c(1,5,9),
V2 = c(4,8,NA),
V3 = c(7,NA,NA))
任何帮助一如既往,非常感谢!
谢谢
您可以在
逐行apply
中使用sort(..., na.last = T)
:
as.data.frame(t(apply(D, 1, sort, na.last = T)))
# V1 V2 V3
#1 1 4 7
#2 5 8 NA
#3 9 NA NA
更新
为避免订购非NA
条目,您可以执行以下操作:
# Revised sample data
D <- matrix(c(1:9), 3)
D[2,1]<- NA
D[3,1]<- NA
D[3,2]<- NA
D <- as.data.frame(D)
D[2,2:3] <- c(8, 5);
D;
# V1 V2 V3
#1 1 4 7
#2 NA 8 5
#3 NA NA 9
as.data.frame(t(apply(D, 1, function(x) c(x[!is.na(x)], x[is.na(x)]))))
#V1 V2 V3
#1 1 4 7
#2 8 5 NA
#3 9 NA NA