gpt4 book ai didi

r - 如何选择具有等于或超过 2 个唯一值的列,同时忽略 NA 和空白?

转载 作者:行者123 更新时间:2023-12-03 08:06:33 25 4
gpt4 key购买 nike

我的数据框看起来与此类似:

 df <- data.frame(ID = c(1, 2, 3, 4, 5),
color = c(NA, "black", "black", NA, "brown"),
animal = c("dog", "", "", "", "")
owner = c("YES", "NO", "NO", "YES", NA))
<表类=“s-表”><标题>ID颜色动物所有者 <正文>1不适用狗是2黑色否3黑色否4不适用是5棕色不适用

我想检索具有超过 2 个唯一值的所有列的列名称,同时在此计算中忽略 NA 和空白/空字符串。

到目前为止我的解决方案:

df_col <- df %>% 
select_if(function(col) length(unique(na.omit(col)))>1)

df_col <- colnames(df_col)

但我注意到 na.omit() 不会有帮助,因为它会删除整行。

如有任何帮助,我们将不胜感激。预先感谢您!

最佳答案

使用n_distinct,它也有na.rm参数,_if/_at/_all已被弃用,有利于across/哪里。可以使用 nzchar 检查空字符串 (''),仅当它非空时才返回 TRUE,因此使用 nzchar 对列的元素进行子集化,然后逐列应用n_distinct并创建条件以仅选择这些列,然后获取名称

library(dplyr)
df %>%
select(where(~ n_distinct(.x[nzchar(.x)], na.rm = TRUE) > 1)) %>%
names

-输出

[1] "ID"    "color" "owner"

还有一个选项是将 "" 转换为 NA (na_if),也许它可能会稍微紧凑

df %>% 
select(where(~ n_distinct(na_if(.x, ""), na.rm = TRUE) > 1)) %>%
names

关于r - 如何选择具有等于或超过 2 个唯一值的列,同时忽略 NA 和空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72175146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com