如何确定数据框中一列中的每个值是否为零? - R语言

11

我有一个数据框,并希望确定给定列中的每个值是否等于零。

这是我拥有的代码:

z <- read.zoo(sub, sep = ",", header = TRUE, index = 1:2, tz = "", format = "%Y-%m-%d %H:%M:%S")

if(all.equal(z$C_duration, 0)) 
  C_dur_acf = NA

但是我遇到了一个错误:

 Error in if (all.equal(z$C_duration, 0)) { : 
  argument is not interpretable as logical

如果整个列都是零,代码应该返回一个布尔值(TRUE/FALSE)。


1
欢迎来到SO。首先,你应该阅读这里关于如何提出好问题的内容;一个好问题有更好的解决机会和获得帮助的机会。另一方面,阅读这个也是很好的。它解释了如何在R中创建可重现的例子。通过提供你的数据片段、期望输出和你已尝试过的事情来帮助用户帮助你。 - SabDeM
z 是一个动物园(zoo)对象,而不是一个数据框(data.frame)。 - G. Grothendieck
@G.Grothendieck 是的,你说得对。在这种情况下,我认为并不重要,因为数据框和zoo对象列可以使用“$”运算符以相同的方式进行索引。 - T.Grover
3个回答

12

使用内置函数 allall(z$C_duration == 0)


太好了!谢谢你!这正是我所需要的,也是这里最简单的解决方案。 - T.Grover

3

这里有一个使用R语言中的花瓣数据集和apply函数的例子,配合all使用,让您可以测试传入的所有对象是否遵守一个或多个逻辑条件。

请注意,在本例中,“对象”是数据框中的一列。使用lapply的代码会对每一列执行相同的操作。

lapply(iris[-5], function(x) all(x == 0))
$Sepal.Length
[1] FALSE

$Sepal.Width
[1] FALSE

$Petal.Length
[1] FALSE

$Petal.Width
[1] FALSE

T. Grover想要检查所有的值是否都等于零,而不是大于或等于零,但除此之外这个答案很好。 - Eli Sadoff
1
@EliSadoff,我知道。原帖会提供一些数据片段,以避免用户使用内置数据集。 - SabDeM
我完全错过了那个。抱歉! - Eli Sadoff

0

使用 all.equal:

if(all.equal(z$C_duration, rep(0, length(z$C_duration)){
    C_dur_acf = NA
}

从本质上讲,all.equal 执行一对一测试。if 语句失败是因为 all.equal(z$C_duration,0) 返回:"Numeric: lengths (##, 1) differ"。

希望能对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接