R - 删除df中包含0个值的列,其中包含一个或多个剩余列

时间:2015-06-13 15:00:05

标签: r loops

我正在编写一段R代码,它循环遍历数据帧,然后运行子集化数据帧中的时间序列预测。但是,我创建循环的方式给了我一些0值的列。可能有一个列具有非零值或许多列具有非零值,但始终存在至少一个具有非零值的列。通过循环的每次迭代可以产生不同数量的非零列。

请参阅以下有关此主题的讨论。

Remove columns with zero values from a dataframe

Delete all columns with 0 from matrix

如何让以下代码生效?我将提供两个例子来捕捉我的问题的关键。第一个例子效果很好,正是我需要适应工作的。

dat <- data.frame(x = rep(0, 10), y = rnorm(10), z = rep(0, 10), a = rnorm(10)) 
dat <- dat[, colSums(dat) > 0]

第二个示例失败,因为只有一列非零值。

dat2 <- data.frame(x = rep(0, 10), y = rep(0, 10), z = rep(0, 10), a = rnorm(10))
dat2 <- dat2[, colSums(dat2) > 0]

任何见解都将不胜感激。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

尝试使用drop=FALSE作为默认值drop=TRUE,或者删除,,它将返回data.frame。有关详细信息,请查看?"["

dat2[colSums(dat2) > 0]

或者

dat2[,colSums(dat2) > 0, drop=FALSE]

如果您使用subset,则默认为drop=FALSE

subset(dat2, select=colSums(dat2) > 0)