我正在尝试对R中数据帧中的NULL值的数量进行求和。我可以使用以下代码轻松地对NA值进行求和:
colSums(is.na(df))
但是当我尝试使用is.null时,我会返回以下错误:
colSums中的错误(is.null(df((:"x"必须是至少二维的数组
我相信解决方案是将数据帧更改为另一种形式来实现这一点,但我不知道是如何做到的,而且互联网搜索已被证明是徒劳的(并且经常将NA和NULL混为一谈(
数据帧中的NULL值实际上是空列表。你必须检查它们的长度是否为0。三年一次:
library(tidyverse)
d <- tribble(~a, ~b,
"a", NULL,
NULL, "y",
"b", "z")
d
# A tibble: 3 x 2
# a b
# <list> <list>
# 1 <chr [1]> <NULL>
# 2 <NULL> <chr [1]>
sum(map_dbl(d, ~length(~.x) > 0))
# [1] 2
or Base R:
d <- data.frame(a = I(list("a", NULL, "b")),
b = I(list(NULL, "y", "z")))
d
# a b
# 1 a
# 2 y
# 3 b z
sum(apply(d, 2, function(a) sum(vapply(a, function(b) length(b) == 0L, numeric(1)))))
#[1] 2