2014-11-04 74 views
0

我发现下面的脚本用于清理NA和左移行。这里的讨论:Dropping all left NAs in a dataframe and left shifting the cleaned rowsr - 删除数据帧中的所有NA,然后升级清理的列

for (i in 1:nrow(dat)) { 

if (is.na(dat[i,1])==TRUE) { 
    dat1 <- dat[i, min(which(!is.na(dat[i,]))):length(dat[i,])] 
    dat[i,] <- data.frame(dat1, t(rep(NA, ncol(dat)-length(dat1)))) 
} 

} 

dat 

我想从柱的顶部被清理不同数量的NAS,然后加档清洗列。有没有人有机会帮助我修改上述脚本?

+1

为什么要这样做?数据值会混淆。 – 2014-11-04 03:20:48

+0

@刺猬:当你说'升档'时,你的意思是“我只想要不含任何NA的行”? – 2014-11-04 03:39:10

+0

你能举一些例子数据吗? – Stedy 2014-11-04 04:14:51

回答

0

是否这样?

dat <- as.data.frame(rbind(c(NA,NA,1,3,5,NA,NA,NA), c(NA,1:3,6:8,NA), c(1:7,NA))) 
dat 
# V1 V2 V3 V4 V5 V6 V7 V8 
# 1 NA NA 1 3 5 NA NA NA 
# 2 NA 1 2 3 6 7 8 NA 
# 3 1 2 3 4 5 6 7 NA 

dat[] <- apply(dat, 2, function(x) `length<-`(na.omit(x), length(x))) 
dat 
# V1 V2 V3 V4 V5 V6 V7 V8 
# 1 1 1 1 3 5 7 8 NA 
# 2 NA 2 2 3 6 6 7 NA 
# 3 NA NA 3 4 5 NA NA NA 
+0

KFB,这就是我以后的事。谢谢!!! – Hedgehog 2014-11-04 18:14:49

相关问题