【问题标题】:Apply over data frame subset causing duplicates / replicates应用数据框子集导致重复/复制
【发布时间】:2019-12-01 17:03:36
【问题描述】:

我正在尝试查找与每列/特征的 NA 值相对应的观察结果。我用更小的数据集复制了这个问题。

whichNA <- function(vec) {
  which(is.na(vec))
}
orgnl <- data.frame("x" = c(3,6,NA,12,NA,18),"y" = c(NA,NA,6,8,10,NA))
subs = orgnl[-c(2:3),]
rownames(subs) = as.character(1:nrow(subs))
apply(subs,2,whichNA)

输出:

$x    
3     
3     
$y    
1 4     
1 4 

预期输出:

$x   
3     
$y    
1 4

【问题讨论】:

  • 使用sapply(subs,whichNA)
  • 我真的没想到。非常感谢。
  • @arg0naut91 在我看来,这是值得回答的,可能包括 Joran 的解释。

标签: r subset apply na


【解决方案1】:

你可以这样做:

sapply(subs, whichNA)

给予:

$x
[1] 3

$y
[1] 1 4

正如@joran 所指出的,在您的输出中实际上没有重复项 - 不同之处仅在于将apply 与您的函数一起使用会产生命名整数。

例如,您可以通过以下方式检查 x 向量:

attr(apply(subs, 2, whichNA)$x, 'names')

[1] "3"

而在sapply 的情况下,此属性为NULL

attr(sapply(subs, whichNA)$x, 'names')

NULL

正如@joran 所建议的,修改函数也可以:

whichNA <- function(vec) {
  unname(which(is.na(vec)))
}

apply(subs, 2, whichNA)

$x
[1] 3

$y
[1] 1 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2018-11-24
    相关资源
    最近更新 更多