gpt4 book ai didi

r - 计算可能包含 NA/缺失值的列值的组合(不是排列)

转载 作者:行者123 更新时间:2023-12-02 19:05:29 26 4
gpt4 key购买 nike

我有点难以计算在多个列中找到的可能包含缺失值 (NA) 的值的组合。

在没有 NA 的列中,我会执行以下操作:

set.seed(42)
foo <- data.frame(a = sample(letters[1:20], 10, replace = T),
b = sample(letters[1:20], 10, replace = T),
c = sample(letters[1:20], 10, replace = T))

# sorting with base::apply, and converting the result to a data frame
foo_sorted <- as.data.frame(t(apply(foo, 1, sort)))

# I can now pass a counting function such as dplyr::count()
# In this example all rows are unique combinations.
dplyr::count(foo_sorted, V1, V2, V3)
#> V1 V2 V3 n
#> 1 a b t 1
#> 2 a c r 1
#> 3 c d o 1
#> 4 d h m 1
#> 5 d k o 1
#> 6 e e q 1
#> 7 e g o 1
#> 8 e n t 1
#> 9 h j r 1
#> 10 i j q 1

但是当 NA 位于数据框中时,此操作会失败:

foo2 <- data.frame(a = sample(letters[1:20], 10, replace = T),
b = sample(letters[11:31], 10, replace = T),
c = sample(letters[21:41], 10, replace = T))

foo2_sorted <- as.data.frame(t(apply(foo2, 1, sort)))
# results in a nested data frame, on which dplyr::count() won't work as expected.
dplyr::count(foo2_sorted, V1, V2, V3)
#> V1 V2 V3 n
#> 1 d d p, r, y 1

我觉得整个应用程序可能是一种尴尬的方法,因此任何不同方法的想法也非常受欢迎。谢谢!

最佳答案

您可以将 na.last = TRUE 添加到 apply 调用中(它是 sort 的参数):

foo2_sorted <- as.data.frame(t(apply(foo2, 1, sort, na.last = TRUE))) 

foo2_sorted %>% dplyr::count(V1, V2, V3)
V1 V2 V3 n
1 b m x 1
2 c l <NA> 1
3 d <NA> <NA> 3
4 e l <NA> 1
5 m p u 1
6 p q <NA> 1
7 p r y 1
8 r <NA> <NA> 1

关于r - 计算可能包含 NA/缺失值的列值的组合(不是排列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65114257/

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