如何使用lapply来计算r中列表中的唯一值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用lapply来计算r中列表中的唯一值相关的知识,希望对你有一定的参考价值。

关于如何从数据框中计算唯一值,我之前已经问了一个类似的问题,但是我需要使用“lapply”,因为我之前使用的方法不起作用,或者我无法使用列表。我也被告知使用其中一个应用函数会更好。

这代表我的数据:

species1 <- data.frame(var_1 = c("a","a","a","b", "b", "b"), var_2 = c("c","c","d", "d", "e", "e"))

species2 <- data.frame(var_1 = c("f","f","f","g", "g", "g"), var_2 = c("h","h","i", "i", "j", "j"))

all_species <- list()

all_species[["species1"]] <- species1
all_species[["species2"]] <- species2

我想使用lapply来获取每个列表的唯一行数,例如,我需要一个输出,如:

count_all_species <- list()
count_all_species[["species1"]] <- data.frame(var_1 = c("a", "b"), unique_number = c("2", "2"))

然后使用“lapply”函数对第二个列表进行相同的操作

答案

这是tidyverse的一个选项。我们循环通过list(与data.frame)的map,由'var_1',summarise分组以获得'var_2'中不同元素的数量(n_distinct

library(dplyr)
library(purrr)
map(all_species, ~ .x %>%
                     group_by(var_1) %>% 
                     summarise(unique_number = n_distinct(var_2)))

或者在循环通过distinct之后使用list,然后做一个count

map(all_species, ~ .x %>% 
                     distinct() %>% 
                     dplyr::count(var_1))

Update

如果变量名称发生变化,那么我们可以在summarise_at中使用位置

map(all_species, ~ .x %>%
                     group_by(var_1) %>% 
                     summarise_at(1, n_distinct))

或者另一种选择是将列名字符串转换为符号(rlang::sym),然后进行评估(!!

map(all_species, ~ .x %>%
             group_by(var_1) %>% 
             summarise(unique_number = n_distinct(!! rlang::sym(names(.x)[2]))))
另一答案

Table将是一个简单的基础R解决方案。

lapply(all_species, function(x) {
 apply(x, 2, table) 
  }
)

以上是关于如何使用lapply来计算r中列表中的唯一值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中使用 lapply 消除异常

在列表中的多个数据帧上应用 lapply,R

如何在 R 的 lapply() 中引用正在操作的行

如何计算列表中的唯一值

如何将 lapply 的输出保存(分配)到 R 中的单个变量中?

使用R语言将不同长度的向量合并为数据框