计算一个数字在列表元素中出现的频率
Count the number of how often a number occurs across list elements
假设我有一个包含 5 个向量的列表,其中填充了 1 到 d 之间的整数,其中 d 可以是任何整数
d = 30 #Intergers that I want to count, i.e. 1:30
set_list <- list(s1 = c(2,4,3,1,20,30), s2 = c(3,30,23,1,3,4),
s3=c(3,4,5,13,15,12, 23:29, 30), s4 = c(1:10, 13:15, 17),
s5 = c(15:20, 23))
在不对列表元素 1-5 和整数 1-30 使用双循环的情况下,我想计算从 1 到 d 的每个整数在列表中出现的次数。例如。 1 出现 3 次,2 出现 2 次,3 出现 3 次,依此类推。
请注意,我总是想检查 1 和 d 之间的所有整数,而不仅仅是列表中出现的整数。所以 d 可以比 set_list 中的最大整数大得多,例如 d=50。因此,我不能使用 table 函数。我想出了如何使用 2 个 for 循环来完成它,但我认为这不是最佳解决方案。
您可以使用 vapply
来执行此操作(假设您需要一个整数向量):
vapply(seq_len(d),
function(x) {
sum(x == unlist(set_list))
},
1L)
或purrr::map_int
:
purrr::map_int(seq_len(d), ~sum(. == unlist(set_list)))
table(ordered(unlist(set_list), levels = seq_len(d)))[seq_len(d)]
假设我有一个包含 5 个向量的列表,其中填充了 1 到 d 之间的整数,其中 d 可以是任何整数
d = 30 #Intergers that I want to count, i.e. 1:30
set_list <- list(s1 = c(2,4,3,1,20,30), s2 = c(3,30,23,1,3,4),
s3=c(3,4,5,13,15,12, 23:29, 30), s4 = c(1:10, 13:15, 17),
s5 = c(15:20, 23))
在不对列表元素 1-5 和整数 1-30 使用双循环的情况下,我想计算从 1 到 d 的每个整数在列表中出现的次数。例如。 1 出现 3 次,2 出现 2 次,3 出现 3 次,依此类推。 请注意,我总是想检查 1 和 d 之间的所有整数,而不仅仅是列表中出现的整数。所以 d 可以比 set_list 中的最大整数大得多,例如 d=50。因此,我不能使用 table 函数。我想出了如何使用 2 个 for 循环来完成它,但我认为这不是最佳解决方案。
您可以使用 vapply
来执行此操作(假设您需要一个整数向量):
vapply(seq_len(d),
function(x) {
sum(x == unlist(set_list))
},
1L)
或purrr::map_int
:
purrr::map_int(seq_len(d), ~sum(. == unlist(set_list)))
table(ordered(unlist(set_list), levels = seq_len(d)))[seq_len(d)]