有人知道如何用R编写一个计算NA值和数据帧有效值的表达式吗



一个提示是您将使用table()is.na

对于此表达式,在您试图查找NA计数/总数的一列中存在特定值。

示例:

team    color   state    div
1       R       NY      1
2       G       WI      1
3       P       ND      2
4       O       CO      2
5       B       TX      1
6       NA      MI      2
7       Y       CA      1
8       V       NA      2

你能帮我写一个表达式,具体计算NAdiv的有效值(12)吗?

我们可以使用data.table,通过将"data.frame"转换为"data.table"(setDT(df1)),按"div"分组,我们unlist为data.table的子集(.SD),用is.na转换为逻辑向量,用sum计数TRUE值以获得NA的计数,类似地求反(!)和sum以获得非NA元素的计数。

library(data.table)
setDT(df1)[, {v1 <- is.na(unlist(.SD));list(countNA = sum(v1), 
countNoNA = sum(!v1)) } , by = div]
#   div countNA countNoNA
#1:   1       0        12
#2:   2       2        10

或者使用tableis.na,我们复制"div"列,使其长度与unlisted列的长度相同,并应用table

table(df1$div[row(df1[-4])], is.na(unlist(df1[-4])))
#    FALSE TRUE
#  1    12    0
#  2    10    2

数据

由于OP将帖子中的数据更改为图像,出于可复制的目的,

df1 <- structure(list(team = 1:8, color = c("R", "G", "P", "O", "B", 
NA, "Y", "V"), state = c("NY", "WI", "ND", "CO", "TX", "MI", 
"CA", NA), div = c(1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L)), .Names = c("team", 
"color", "state", "div"), class = "data.frame", row.names = c(NA, -8L))

最新更新