2

如果给定列中的行为空白或 NA,我如何从数据框中子集行。例如:

    x <- c(1,2,3,4,"","","")
    y <- c("A","B","C","D","E","F","G")
    z <- c(100,200,300,400,500,600,700)
    xyz <- data.frame(x,y,z)
    View(xyz)

在此处输入图像描述

g1 <- subset(xyz, subset=(x > 0))

回报:

警告消息:在 Ops.factor(x, 0) 中:> 对因子没有意义

如何让它返回一个新数据框,它是原始数据框的子集,但仅包含 X 列大于零的行?

4

2 回答 2

4

创建数据框时,您指定它x应该是一个因子变量。

(从技术上讲,您指定它应该是字符,但是data.frame已经读懂了您的想法并将其转换为您的因素。同样,从技术上讲,您没有指定它应该是字符,但是 R 已经读懂了您的想法,并且因为您尝试结合一个向量中的数字和字符,它将它们全部强制转换为字符模式的向量。)

因此,在这种情况下,“大于零”作为比较运算符没有意义。我将读懂您的想法并得出结论,您实际上想要x数字,但要考虑值不可用的情况。在这种情况下,你应该这样做

xyz$x <- as.numeric(as.character(xyz$x))
subset(xyz, !is.na(x))
于 2013-08-14T06:59:42.210 回答
2

因为x被存储为一个因子,所以大于一个值在这里没有任何意义。您可以使用索引:

xyz[xyz$x != "",]
#   x y   z
# 1 1 A 100
# 2 2 B 200
# 3 3 C 300
# 4 4 D 400

NA与 不同"",您可以使用is.na(). 因此,如果这种情况下的值是NA而不是""xyz[!is.na(xyz$x),]就可以了

于 2013-08-14T06:57:06.617 回答