我正在编写一段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]
任何见解都将不胜感激。谢谢你的帮助。
答案 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)