Извлечение уникальных чисел из строки в R

Вы можете использовать это, чтобы отключить будущие даты. Внутри функции document.ready поместите

//Display Only Date till today //

var dtToday = new Date();
var month = dtToday.getMonth() + 1;     // getMonth() is zero-based
var day = dtToday.getDate();
var year = dtToday.getFullYear();
if(month < 10)
   month = '0' + month.toString();
if(day < 10)
   day = '0' + day.toString();

var maxDate = year + '-' + month + '-' + day;
$('#dateID').attr('max', maxDate);

и в форму


Вот рабочий jFiddle Demo

29
задан Community 23 May 2017 в 11:54
поделиться

7 ответов

Для второго ответа вы можете использовать gsub, чтобы удалить из строки все, что не является числом, а затем разбить строку следующим образом:

unique(as.numeric(unlist(strsplit(gsub("[^0-9]", "", unlist(ll)), ""))))
# [1] 7 6 1 5 2

Для первого ответа, аналогично используя strsplit,

unique(na.omit(as.numeric(unlist(strsplit(unlist(ll), "[^0-9]+")))))
# [1]   7 667  11   5   2

PS: не называйте вашу переменную list (так как есть встроенная функция list). Я назвал ваши данные как ll.

56
ответ дан Arun 23 May 2017 в 11:54
поделиться

Вот еще один ответ, который использует gregexpr, чтобы найти числа, и regmatches, чтобы извлечь их:

l <- c("djud7+dg[a]hs667", "7fd*hac11(5)", "2tu,g7gka5")

temp1 <- gregexpr("[0-9]", l)   # Individual digits
temp2 <- gregexpr("[0-9]+", l)  # Numbers with any number of digits

as.numeric(unique(unlist(regmatches(l, temp1))))
# [1] 7 6 1 5 2
as.numeric(unique(unlist(regmatches(l, temp2))))
# [1]   7 667  11   5   2
16
ответ дан A5C1D2H2I1M1N2O1R2T1 23 May 2017 в 11:54
поделиться

Решение с использованием stringi

 # extract the numbers:

 nums <- stri_extract_all_regex(list, "[0-9]+")

 # Make vector and get unique numbers:

 nums <- unlist(nums)
 nums <- unique(nums)

И это ваше первое решение

Screenshot from on-liner in R

Для второго решения я бы использовал substr:

nums_first <- sapply(nums, function(x) unique(substr(x,1,1)))
7
ответ дан altabq 23 May 2017 в 11:54
поделиться

Вы можете использовать ?strsplit (как предложено в ответе @ Аруна в Извлечение чисел из векторов (строк) ):

l <- c("djud7+dg[a]hs667", "7fd*hac11(5)", "2tu,g7gka5")

## split string at non-digits
s <- strsplit(l, "[^[:digit:]]")

## convert strings to numeric ("" become NA)
solution <- as.numeric(unlist(s))

## remove NA and duplicates
solution <- unique(solution[!is.na(solution)])
# [1]   7 667  11   5   2
6
ответ дан Community 23 May 2017 в 11:54
поделиться

Используйте strsplit, используя pattern в качестве инверсии числовых цифр: 0-9

Для приведенного вами примера сделайте следующее:

tmp <- sapply(list, function (k) strsplit(k, "[^0-9]"))

Затем просто объедините все ` устанавливает 'в списке, вот так:

tmp <- Reduce(union, tmp)

Тогда вам нужно только удалить пустую строку.

1
ответ дан asb 23 May 2017 в 11:54
поделиться

Решение stringr с str_match_all и конвейерными операторами. Для первого решения:

library(stringr)
str_match_all(ll, "[0-9]+") %>% unlist %>% unique %>% as.numeric

Второе решение:

str_match_all(ll, "[0-9]") %>% unlist %>% unique %>% as.numeric

(Примечание: я также назвал список ll)

4
ответ дан Joe 23 May 2017 в 11:54
поделиться

Проверьте функцию str_extract_numbers() из пакета strex.

pacman::p_load(strex)
list=list()
list[1] = "djud7+dg[a]hs667"
list[2] = "7fd*hac11(5)"
list[3] = "2tu,g7gka5"
charvec <- unlist(list)
print(charvec)
#> [1] "djud7+dg[a]hs667" "7fd*hac11(5)"     "2tu,g7gka5"
str_extract_numbers(charvec)
#> [[1]]
#> [1]   7 667
#> 
#> [[2]]
#> [1]  7 11  5
#> 
#> [[3]]
#> [1] 2 7 5
unique(unlist(str_extract_numbers(charvec)))
#> [1]   7 667  11   5   2

Создано в 2018-09-03 с помощью пакета представ (v0.2.0).

1
ответ дан Rory Nolan 23 May 2017 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: