一个提示是您将使用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
你能帮我写一个表达式,具体计算NA
和div
的有效值(1
和2
)吗?
我们可以使用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
或者使用table
和is.na
,我们复制"div"列,使其长度与unlist
ed列的长度相同,并应用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))