计算数据帧中的非 NA;将答案作为向量

发布于 2024-10-17 03:26:45 字数 538 浏览 4 评论 0原文

假设我有以下 R data.frame ZZZ

( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )

## not run
   n  m o
1  1  6 7
2  2 NA 8
3 NA NA 8

我想以向量的形式知道我有多少个非 NA。我希望得到的答案是:

2, 1, 3

当我使用命令 length(ZZZ) 时,我得到 3,这当然是 中向量的数量data.frame,一条足够有价值的信息。

我还有其他函数可以在此 data.frame 上运行,并以向量的形式给出答案,但是,天哪,长度并不是这样运行的。

Say I have the following R data.frame ZZZ:

( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )

## not run
   n  m o
1  1  6 7
2  2 NA 8
3 NA NA 8

I want to know, in the form of a vector, how many non-NAs I've got. I want the answer available to me as:

2, 1, 3

When I use the command length(ZZZ), I get 3, which of course is the number of vectors in the data.frame, a valuable enough piece of information.

I have other functions that operate on this data.frame and give me answers in the form of vectors, but, dang-it, length doesn't operate like that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

冷月断魂刀 2024-10-24 03:26:45
colSums(!is.na(x))

矢量化。

colSums(!is.na(x))

Vectorisation ftw.

过期情话 2024-10-24 03:26:45

尝试一下:

# define "demo" dataset
ZZZ <- data.frame(n=c(1,2,NA),m=c(6,NA,NA),o=c(7,8,8))
# apply the counting function per columns
apply(ZZZ, 2, function(x) length(which(!is.na(x))))

运行后:

> apply(ZZZ, 2, function(x) length(which(!is.na(x))))
n m o 
2 1 3 

如果您确实坚持返回向量,则可以使用 as.vector,例如通过定义此函数:

nonNAs <- function(x) {
    as.vector(apply(x, 2, function(x) length(which(!is.na(x)))))
    }

您可以简单地运行 nonNAs(ZZZ) :

> nonNAs(ZZZ)
[1] 2 1 3

Try this:

# define "demo" dataset
ZZZ <- data.frame(n=c(1,2,NA),m=c(6,NA,NA),o=c(7,8,8))
# apply the counting function per columns
apply(ZZZ, 2, function(x) length(which(!is.na(x))))

Having run:

> apply(ZZZ, 2, function(x) length(which(!is.na(x))))
n m o 
2 1 3 

If you really insist on returning a vector, you might use as.vector, e.g. by defining this function:

nonNAs <- function(x) {
    as.vector(apply(x, 2, function(x) length(which(!is.na(x)))))
    }

You could simply run nonNAs(ZZZ):

> nonNAs(ZZZ)
[1] 2 1 3
标点 2024-10-24 03:26:45

要获取缺失值的总数,请使用 sum(is.na(x)) ,要按列使用 colSums(is.na(x)) ,其中 x 是包含数据集的变量

For getting total no of missing values use sum(is.na(x)) and for colum-wise use colSums(is.na(x)) where x is varible that contain dataset

妄想挽回 2024-10-24 03:26:45

如果您只想要 NA 的总和,那么 sum() 和 !is.na() 就可以做到:

ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8))
sum(!is.na(ZZZ))

If you only want the sum total of NAs overall, then sum() with !is.na() will do it:

ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8))
sum(!is.na(ZZZ))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文