在R中处理字符串中的数字

时间:2018-10-15 04:44:38

标签: r string unique

我有以下(包含数字的)字符向量:

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是从19的任何数字。

在上面的示例中,由于前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个元素,等等。

我想将最终输出保留为长度与原始长度相同的字符向量。

1 个答案:

答案 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步骤索引中),则可以使用上述代码创建函数。