我有以下(包含数字的)字符向量:
nums = c("1, 2", "1, 2, 4", "2, 4", "1, 2, 3, 4, 5", "2, 3, 5", NA, NA, NA, NA)
我想设置一种算法来测试n
中元素的nums
子集是否包含n
唯一编号,然后从其他元素中删除这些编号。其中n
是从1
到9
的任何数字。
在上面的示例中,由于前3
个元素仅包含3
个数字:1, 2, 4
,因此这些数字应从其他元素中删除。因此输出将是:
nums = c("1, 2", "1, 2, 4", "2, 4", "3, 5", "3, 5", NA, NA, NA, NA)
请注意,它可以是具有2
个唯一编号的2
个元素,也可以是具有4
个唯一编号的4
个元素,等等。
我想将最终输出保留为长度与原始长度相同的字符向量。
答案 0 :(得分:0)
如果我理解得很好,则可以应用以下内容:
Number
如果对第n个第一个子集进行参数化以创建library(stringr)
library(readr)
library(purrr)
nums = c("1, 2", "1, 2, 4", "2, 4", "1, 2, 3, 4, 5", "2, 3, 5", NA, NA, NA, NA)
# create a list within each element is a character element of nums
num_into_list <- stringr::str_split(nums, ",")
# convert to numbers
num_into_list <- purrr::map(num_into_list, readr::parse_number)
# collect unique numbers from the nth first subset of the list (example 3)
not_allowed <- unique(unlist(num_into_list[1:3]))
# filter only values on the rest of the subset that doesn't contain
# values in not_allowed vector, using a logical subsetting operation
# inside of anonymous function (purrr shortcut to create this)
output_list <- c(num_into_list[1:3], # first 3 subset are the same
purrr::map(num_into_list[4:9], ~ .[!(. %in% not_allowed)]))
# finally convert into a chr vector
output <- unlist(output_list)
向量和向量的长度,然后重构列表(在not_allowed
步骤索引中),则可以使用上述代码创建函数。