【问题标题】:Simple method of counting non-NAs in column of data String [duplicate]在数据字符串列中计算非NA的简单方法[重复]
【发布时间】:2013-03-29 13:52:27
【问题描述】:

我正在尝试找到一种简单的方法来计算数据框列中的非缺失案例。我已经使用了该功能:

foo<- function(x) { sum(!is.na(x)) }

然后通过 sapply() 将其应用到数据框

stats$count <- sapply(OldExaminee, foo2, simplify=T)

虽然这很好用,但我只是不相信没有更简单的计数方法,即基本函数集中的东西。

有什么想法吗?

【问题讨论】:

  • 欢迎来到sapplybase.. 和sapply( yourdata , function( x ) sum( !is.na( x ) ) ) 非常快。 :)
  • @AnthonyDamico 谢谢,我已经多次使用这个页面,最后决定加入。我是一个忠实的 R 用户,但我不敢相信没有一个真正简单的计数函数。
  • @SpringMeister,由于您的预期用途是在data.frame 上,您可以将colSumsis.na 一起使用。检查我的答案。
  • @Arun yours 是迄今为止最简单的一个。谢谢!

标签: r na


【解决方案1】:

对于data.frame,您可以使用colSumsis.na 获取它:

set.seed(45)
df <- data.frame(matrix(sample(c(NA,1:5), 50, replace=TRUE), ncol=5))
#    X1 X2 X3 X4 X5
# 1   3  2 NA  2 NA
# 2   1  5  1  1  4
# 3   1  1  3  2  3
# 4   2  2  3  5  3
# 5   2  2  5  2  2
# 6   1  2 NA  3  3
# 7   1  5  5  5  2
# 8   3 NA  4  1  5
# 9   1  2  3 NA  1
# 10 NA  1  1  2  2

colSums(!is.na(df))
# X1 X2 X3 X4 X5 
#  9  9  8  9  9 

【讨论】:

    【解决方案2】:

    你可以使用 na.omit

    length(na.omit(x));
    

    随着 caelorus 的帖子所表明的应用

    【讨论】:

    • 这确实更简单,但正如我对 caerolus 所说,不是“内置”功能。感谢分享。
    • @SprengMeister table 函数不包括 NA,所以你可能会说 sum(table(x)) 更接近“内置”。但我怀疑@AdityaSihag 的答案对于大数据来说更快。
    【解决方案3】:

    您可以使用whichlength

    length(which(!is.na(x$col)))
    

    which 返回匹配元素的索引(在本例中为非NAs),length 告诉您这些索引有多少。

    一次用于所有列:

    apply(OldExaminee, 2, function(x){ length(which(!is.na(x))) })
    

    【讨论】:

    • 感谢您的想法。它确认可能没有完全简单的解决方案,类似于count(df$x, NA)
    • 我不知道。谢谢!
    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多