R-对空列重新排序
我有下一个问题。 如果我有下面的数据帧db,并且我想重新排列列,使它们保持空列在末尾(如db2中)。 我如何动态地完成它? 多谢各位R-对空列重新排序,r,dataframe,R,Dataframe,我有下一个问题。 如果我有下面的数据帧db,并且我想重新排列列,使它们保持空列在末尾(如db2中)。 我如何动态地完成它? 多谢各位 db<-data.frame(N=c(2,4,6,8), a=c(1,1,1,1), b=c(1,1,1,1), c=c(NA,1,1,1), d=c(NA,1,1,1), e=c(NA,NA,1,1),
db<-data.frame(N=c(2,4,6,8),
a=c(1,1,1,1),
b=c(1,1,1,1),
c=c(NA,1,1,1),
d=c(NA,1,1,1),
e=c(NA,NA,1,1),
f=c(NA,NA,1,1),
g=c(NA,NA,NA,1),
h=c(NA,NA,NA,1))
db2<-data.frame(N=c(2,4,6,8),
a=c(NA,NA,NA,1),
b=c(NA,NA,1,1),
c=c(NA,1,1,1),
d=c(1,1,1,1),
e=c(1,1,1,1),
f=c(NA,1,1,1),
g=c(NA,NA,1,1),
h=c(NA,NA,NA,1))
N a b c d e f g h
1 2 NA NA NA 1 1 NA NA NA
2 4 NA NA 1 1 1 1 NA NA
3 6 NA 1 1 1 1 1 1 NA
4 8 1 1 1 1 1 1 1 1
db如果每行的NAs数量始终为偶数,则在行中循环,通过在开始和结束处附加一半的NAs来重新排列NA
db[-1] <- t(apply(db[-1], 1, function(x) {
i1 <- is.na(x)
if(sum(i1) > 0) setNames(c(rep(NA,sum(i1)/2), x[!i1],
rep(NA, sum(i1)/2)), names(x)) else x}))
db
# N a b c d e f g h
#1 2 NA NA NA 1 1 NA NA NA
#2 4 NA NA 1 1 1 1 NA NA
#3 6 NA 1 1 1 1 1 1 NA
#4 8 1 1 1 1 1 1 1 1
db[-1]您是否总是每行有偶数个NAs?是的,总是这样。具有偶数和空的情况。