删除具有负值的行

时间:2010-11-18 10:49:17

标签: r row

在R中我试图删除数据框(蚂蚁)中的行,这些行在标题为“浊度”的列下具有负值。我试过了

ants<-ants[ants$Turbidity<0,]

但它返回以下错误:

Warning message:
In Ops.factor(ants$Turbidity, 0) : < not meaningful for factors

为什么会出现这种情况?也许我需要做出负面的价值观 在我删除所有N之前的NA?

非常感谢任何想法,谢谢!

@Joris:结果是

str(ants$Turbidity)

num [1:291] 0 0 -0.1 -0.2 -0.2 -0.5 0.1 -0.4 0 -0.2 ......

4 个答案:

答案 0 :(得分:3)

Marek是对的,这是一个数据问题。现在要小心,如果你使用[as.numeric(蚂蚁$浊度),因为它总是正数。它给出因子水平(1到长度(蚂蚁$浊度)),而不是数值因子。

试试这个:

tt <- as.numeric(as.character(ants$Turbidity))
which(!is.na(tt))

它将为您提供一个索引列表,其中值首先不是数字。这应该可以让您首先清理数据。

例如:

> Turbidity <- factor(c(1,2,3,4,5,6,7,8,9,0,"a"))
> tt <- as.numeric(as.character(Turbidity))
Warning message:
NAs introduced by coercion 
> which(is.na(tt))
[1] 11

你不应该使用as.numeric(as.character(...))结构来转换有问题的数据,因为它会产生NA,这会使其余的数据混乱。例如:

> Turbidity[tt > 5]
[1] 6    7    8    9    <NA>
Levels: 0 1 2 3 4 5 6 7 8 9 a

答案 1 :(得分:3)

在阅读数据后始终执行summary(ants),并检查您是否得到了您的期望。

它可以为您节省很多问题。数字数据很容易神奇地转换为字符或因子类型。

答案 2 :(得分:0)

修改即可。我忘记了as.character转换(请参阅Joris评论)。


消息表示ants$Turbiditfactor。它会在你做的时候起作用

ants <- ants[as.numeric(as.character(ants$Turbidity)) > 0,]

ants <- subset(ants, as.character(as.numeric(Turbidity)) > 0)

但真正的问题是您的数据不准备分析。这种转换应该在一开始就完成。你应该小心,因为也可能有非数字值。

答案 3 :(得分:0)

这也可以使用tidyverse进行工作(假设列是正确的数据类型)。

ants %>% dplyr::filter(Turbidity >= 0)