在数据框中的所有列中找到唯一值的计数,而不包括NA值(R)

发布于 2025-02-04 21:46:34 字数 532 浏览 5 评论 0原文

给定可重现的数据框,我想在每列中找到不包括缺失(NA)值的唯一值数。下面的代码计数Na值,因此,nat_country列的基数显示为n_unique_values dataframe中的4(应该为3)。在Python中,存在nunique()函数,该功能不考虑Na值。在R中,如何实现这一目标?

nat_country = c("United-States", "Germany", "United-States", "United-States", "United-States", "United-States", "Taiwan", NA)
age = c(14,15,45,78,96,58,25,36)
dat = data.frame(nat_country, age)
n_unique_values  = t(data.frame(apply(dat, 2, function(x) length(unique(x)))))

Given a reproducible dataframe, I want to find the number of unique values in each column not including missing (NA) values. Below code counts NA values, as a result the cardinality of nat_country column shows as 4 in n_unique_values dataframe (it is supposed to be 3). In python there exists nunique() function which does not take NA values into consideration. In r how can one achieve this?

nat_country = c("United-States", "Germany", "United-States", "United-States", "United-States", "United-States", "Taiwan", NA)
age = c(14,15,45,78,96,58,25,36)
dat = data.frame(nat_country, age)
n_unique_values  = t(data.frame(apply(dat, 2, function(x) length(unique(x)))))

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

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

发布评论

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

评论(3

寄居者 2025-02-11 21:46:34

您可以使用dplyr :: n_distinct na.rm = t

library(dplyr)
sapply(dat, n_distinct, na.rm = T)
#map_dbl(dat, n_distinct, na.rm = T)

#nat_country         age 
#          3           8 

在基本r中,您可以使用na.omit

sapply(dat, \(x) length(unique(na.omit(x))))
#nat_country         age 
#          3           8 

You can use dplyr::n_distinct with na.rm = T:

library(dplyr)
sapply(dat, n_distinct, na.rm = T)
#map_dbl(dat, n_distinct, na.rm = T)

#nat_country         age 
#          3           8 

In base R, you can use na.omit as well:

sapply(dat, \(x) length(unique(na.omit(x))))
#nat_country         age 
#          3           8 
心安伴我暖 2025-02-11 21:46:34

我们可以使用MAPmap_dfr n_distinct

library(dplyr)
library(purrr)
dat %>% 
  map_dfr(., n_distinct, na.rm = TRUE)

 nat_country   age
        <int> <int>
1           3     8
library(dplyr)
library(purrr)

dat %>% 
  map(., n_distinct, na.rm = TRUE) %>% 
  unlist()
nat_country         age 
          3           8 

We could use map or map_dfr with n_distinct:

library(dplyr)
library(purrr)
dat %>% 
  map_dfr(., n_distinct, na.rm = TRUE)

 nat_country   age
        <int> <int>
1           3     8
library(dplyr)
library(purrr)

dat %>% 
  map(., n_distinct, na.rm = TRUE) %>% 
  unlist()
nat_country         age 
          3           8 
温柔戏命师 2025-02-11 21:46:34

基础r 中,您可以使用。如果要更改默认行为,它还具有参数USENA

sapply(dat, function(x) length(table(x)))
nat_country         age 
          3           8

In base R you can use table. It also has a parameter useNA if you want to change the default behavior.

sapply(dat, function(x) length(table(x)))
nat_country         age 
          3           8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文