如何使用 lapply 计算 r 列表中的唯一值
How to use lapply to count unique values from a list in 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
的选项。我们循环遍历 data.frame
的 list
(使用 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)))
或者在循环遍历 list
之后使用 distinct
然后执行 count
map(all_species, ~ .x %>%
distinct() %>%
dplyr::count(var_1))
更新
如果变量名改变了,那么我们可以使用position in 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
将是一个简单的 base-R 解决方案。
lapply(all_species, function(x) {
apply(x, 2, table)
}
)
我之前在这里问过一个类似的问题,关于如何计算数据框中的唯一值,但我需要使用 "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
的选项。我们循环遍历 data.frame
的 list
(使用 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)))
或者在循环遍历 list
之后使用 distinct
然后执行 count
map(all_species, ~ .x %>%
distinct() %>%
dplyr::count(var_1))
更新
如果变量名改变了,那么我们可以使用position in 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
将是一个简单的 base-R 解决方案。
lapply(all_species, function(x) {
apply(x, 2, table)
}
)