从R中的数据框子集空白行

时间:2013-08-14 06:50:07

标签: r dataframe subset

如果给定列中的行为空或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)

enter image description here

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

返回:

  

警告讯息:   在Ops.factor(x,0)中:&gt;对因素没有意义

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

2 个答案:

答案 0 :(得分:3)

创建数据框时,您指定x应为因子变量。

(从技术上讲,你指定它应该是字符,但是data.frame已经读过你的想法并将它转换为你的因素。再次,从技术上讲,你没有指明它应该是字符,但是R已经读过你的因为你试图在一个向量中组合数字和字符,它会将它们全部强制转换为字符模式的向量。)

因此,在此上下文中,“大于零”作为比较运算符没有意义。我将会阅读您的想法并得出结论,您确实希望x为数字,但允许值不可用的情况。在这种情况下,你应该做

xyz$x <- as.numeric(as.character(xyz$x))
subset(xyz, !is.na(x))

答案 1 :(得分: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),]就可以解决问题