首页 文章

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

提问于
浏览
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)

enter image description here

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

返回:

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

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

2 回答

  • 3

    因为 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),] 会做的伎俩

  • 2

    创建数据框时,您指定 x 应该是因子变量 .

    (从技术上讲,你指定它应该是字符,但 data.frame 已经读过你的想法并将其转换为你的因素 . 再次,从技术上讲,你没有将它们全部强制转换为字符模式的向量 . )

    因此,"greater than zero"不会阅读你的想法,并得出结论,你实际上希望 x 是数字,但允许值不可用的情况 . 在那种情况下,你应该这样做

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

相关问题